1、一般而言,&在 =左邊,表示引用;
&在 =右邊,表示取位址。
eg、int &rn = a;//rn為普通變數a引用,即為a的別名,共享記憶體,佔同乙個記憶體空間。
int* p = &a;//定義指標p並初始化為a的位址,即p指向a,其中a為普通變數(省略其定義)
2、引用必須也只能在宣告的時候初始化,以後均不能把該引用作為其他變數名的別名。
3、野指標:指標p沒有進行初始化---->此時指標p為野指標----->若此時對其內容進行賦值,會產生無法預料的情況,可能導致程式崩潰。
最好養成定義指標p就直接給他初始化,一定要避免野指標的出現!!!
4、 引數為指標引用型,如void swap(char *&x,char *&y){} 則傳入函式的就是實參,不是形參!【引用直接在原記憶體位址上修改內容,可看成可以傳出函式。】
如果引數不為指標引用,那麼指標交換只能在swap中有效,無法帶出函式體,因為在函式體中,函式棧會分配兩個臨時的指標變數分別指向兩個指標引數,對實際的字串無效。
如果引數採用二級指標,則同樣可以傳出函式,達到字串交換的目的。
5、引數引用:
const float pi = 3.14f;
float f;//全域性變數
float f1(float r)
float& f2(float r)
int main()
6、常量變數和常量引用
把const放在引用之前表示宣告的是乙個常量引用。不能使用常量引用修改引用的變數的值。
eg…(1)const int b = 10;
int &c = b;//錯誤!b已經宣告為常量,而c為變數,不可進行賦值。
(2)int a = 7;
const int &d = a;
d++;//錯誤!d是常量引用,不能對其進行自加等操作。
即對於常量型別的變數,其引用也必須是常量型別的。
對於非常量型別的變數,其引用可以是常量型別的,也可以是非常量型別的。
無論什麼時候,都不能使用常量引用修改其引用的變數的值。
簡單的說,小範圍 = 大範圍;//正確
大範圍 = 小範圍;//錯誤
引用和指標二(側重異同)
引用指標的區別 1 初始化要求不同。引用在建立的同時必須初始化,即引用到乙個有效的物件 指標在定義的時候可以不必初始化,可以在定義後面的任何地方重新賦值。2 可修改行不同。引用一旦被初始化為指向乙個物件,它就不能被改變為另乙個物件的引用 指標在任何時候都可以改變為指向另乙個物件。給引用賦值並不是改變...
引用和指標的巨集觀比對 引用和指標(一)
目錄 一般性變數引用的關鍵規則 引數引用的常見錯誤 引用和指標的區別是什麼?引用為什麼比指標安全?對於常量型別的變數,其引用必須是常量型別的,對於非常量型別的變數,其引用可以是常量型別的,也可以是非常量型別的。但無論什麼情況,都不能使用常量引用去修改引用的變數的值。include include i...
指標和引用,const 指標和const 引用
指標和引用是在使用中經常弄混淆的兩個概念。引用 reference 為物件起了另外乙個名字,用符號 表示。name,例如 int i 1024 int ref i 一般在初始化變數時,初始值會被拷貝到新建立的物件中,然而定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引...