關於int *a; int &a; int & *a; int * &a

關於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一樣,兩者生成的二進制代碼一樣。這再一次說明了引用就是指針。

以上如果有什麼錯誤或什麼建議,忘高手們指出哈!呵呵

發佈了7 篇原創文章 · 獲贊 3 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章