指標和引用的比較

來源:互聯網
上載者:User

標籤:c++ 學習筆記

一 Reference 和指標的區別

雖然使用引用(reference)和指標都可間接訪問另一個值,但它們之間有兩個重要區別。第一個區別在於引用總是指向某個對象:定義引用時沒有初始化是錯誤的。第二個重要區別則是賦值行為的差異:給引用賦值修改的是該引用所關聯的對象的值,而並不是使引用與另一個對象關聯。引用一經初始化,就始終指向同一個特定對象(這就是為什麼引用必須在定義時初始化的原因)。 考慮以下兩個程式段。第一個程式段將一個指標賦給另一指標: 
 int ival = 1024, ival2 = 2048;  int *pi = &ival, *pi2 = &ival2;  pi = pi2; // pi now points to ival2 

賦值結束後,pi 所指向的 ival 對象值保持不變,賦值操作修改了 pi 指標的值,使其指向另一個不同的對象。現在考慮另一段相似的程式,使用兩個引用賦值: 
 
int &ri = ival, &ri2 = ival2; ri = ri2; // assigns ival2 to ival 

這個賦值操作修改了 ri 引用的值 ival 對象,而並非引用本身。賦值後,這兩個引用還是分別指向原來關聯的對象,此時這兩個對象的值相等。 


int *ip[4];    // array of pointers to intint (*ip)[4];  // pointer to an array of 4 ints


三 typedef 簡化指向多維陣列的指標

typedef 類型定義可使指向多維陣列元素的指標更容易讀、寫和理解。以下程式用 typedef 為 ia 的元素類型定義新的類型名: 

int ia[3][4]; // array of size 3, each element is an array of ints of size 4 int (*ip)[4] = ia; // ip points to an array of 4 ints ip = &ia[2]; // ia[2] is an array of 4 intstypedef int int_array[4]; int_array *ip = ia; 
可使用 typedef 類型輸出 ia 的元素: 
 for (int_array *p = ia; p != ia + 3; ++p)    for (int *q = *p; q != *p + 4; ++q)      cout << *q << endl; 
外層的 for 迴圈首先初始化 p 指向 ia 的第一個內部數組,然後一直迴圈到 ia 的三行資料都處理完為止。++p 使 p 加 1,等效於移動指標使其指向 ia 的下一行(例如:下一個元素)。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.