(mit) 關於int *a; int &a; int & *a; int * &a
阿新 • • 發佈:2021-07-18
a) int a;表示一個記憶體空間,這個空間用來存放一個整數(int);
b) int* a;表示一個記憶體空間,這個空間用來存放一個指標,這個指標指向一個存放整數的空間,即a)中提到的空間;
c) int** a;表示一個記憶體空間,這個空間用來存放一個指標,這個指標指向一個存放指標的空間,並且指向的這個空間中的指標,指向一個整數。也簡單的說,指向了一個b)中提到的空間;
d) int (*a)[10];表示一個記憶體空間,這個空間用來存放一個指標,這個指標指向一個長度為10、型別為int的陣列;和int** a的區別在於,++、+=1之後的結果不一樣,其他用法基本相同。
以上四種類型見上圖表示。
e) int (*a)(int);表示一個記憶體空間,這個空間用來存放一個指標,這個指標指向一個函式,這個函式有一個型別為int的引數,並且函式的返回型別也是int。
上述的四條語句,前面兩個很好理解,而後面兩個,大部分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一樣,兩者生成的二進位制程式碼一樣。這再一次說明了引用就是指標。
以上如果有什麼錯誤或什麼建議,忘高手們指出哈!呵呵