使用引用reference)和指針都可間接訪問另一個值,但它們之間有兩個重要區別。
1、引用總是指向某個對象:定義引用時沒有初始化是錯誤的。
2、賦值行為的差異:給引用賦值修改的是該引用所關聯的對象的值,而並不是使引用與另一個對象關聯。引用一經初始化,就始終指向同一個特定對象這就是為什麼引用必須在定義時初始化的原因)。
下面舉例說明這兩點差別:
例1:
#include <iostream> using namespace std; void main() { int ival = 1024, ival2 = 2048; int *pi = &ival, *pi2 = &ival2; pi = pi2; cout<<ival<<" "<<ival2<<endl; cout<<pi<<" "<<pi2<<endl; }
賦值結束後,pi 所指向的ival對象值為1024保持不變,賦值操作修改了 pi 指針的值,使其指向另一個不同的對象,pi和pi2指向的地址是一樣的!
例2:
#include <iostream> using namespace std; void main() { int ival = 1024, ival2 = 2048; int &ri = ival, &ri2 = ival2; ri = ri2; // assigns ival2 to ival cout<<ival<<" "<<ival2<<endl; cout<<&ri<<" "<<&ri2<<endl; }
這個賦值操作修改了 ri 引用的值ival對象,而並非引用本身。賦值後,ival的值和ival2的一樣,都是2048,但是這兩個引用還是分別指向原來關聯的對象ri和ri2地址不同),此時這兩個對象的值相等。
本文出自 “我的學習筆記” 博客,請務必保留此出處http://6924918.blog.51cto.com/6914918/1270676