關於int *a; int &a; int & *a; int * &a
上述的四條語句,前面兩個很好理解,而後面兩個,大部分C++初學者都會比較困惑,今天我也是查閱了一些資料以後才恍然大悟。下面具體來說明一下:
int i;
int *a = &i;//這裏a是一個指針,它指向變量i
int &b = i;//這裏b是一個引用,它是變量i的引用,引用是什麼?它的本質是什麼?下面會具體講述
int * &c = a;//這裏c是一個引用,它是指針a的引用
int & *d;//這裏d是一個指針,它指向引用,但引用不是實體,所以這是錯誤的
先是第一個問題:引用的本質是什麼?
引用就是指針,兩者沒有區別。我們可以把引用想象成一個不需要"*"就可以訪問變量的指針,對比如下程序:
void function(int *a)
{
*a = 100;
}int main()
{
int x=200;int *b = &x;
function(b);
return(0);
}void function(int &a)
{
a = 100;
}int main()
{
int x = 200;function(x);
return(0);
}以上兩段程序完成的功能是一樣的。
第二個問題:int * &a和int & *a
我在寫這兩句語句時,在int 和*(&)間空了一格,而後面的&(*)緊跟a。原因是:分析此類語句時,先看a前緊跟的是什麼,它決定了a的類型。而int後的一個空格是爲了防止int *a, b;//a是指針,而b不是。
其他:int * *a;
它的功能和int * &a一樣,兩者生成的二進制代碼一樣。這再一次說明了引用就是指針。
以上如果有什麼錯誤或什麼建議,忘高手們指出哈!呵呵