【C進階】int &x,int* x,int *x,int**。解釋說明

int a    :一個int類型,名稱叫a

int* a:一個整形的指針,名稱叫a

int *a:一個指向整型的地址,名稱叫a(一級指針,表示a所指向的地址裏面存放的是一個int類型的值)

int **a :二級指針,表示a所指向的地址裏面存放的是一個指向int類型的指針(即a指向的地址裏面存放的是一個指向int的一級指針)

int & a:聲明一個int引用類型,名稱叫a


C語言中int *a與int* a的區別:

用法上沒有區別,理解上有區別。前者表示a地址指向的類型是整形,後者表示a是個整形的指針。


int *p 與 int **p 之區別:

一級指針存放變量的地址,指向的值是變量的內容。如int* p={1,2,3}, p=數組的首地址,*p=數組的第一個值;    

二級指針存放一級指針的地址,指向一級指針。如int*p ={1,2,3}, int**pp=&p,pp=指針p的首地址,*pp=數組的首地址,**pp=數組第一個值1。


int &

a)  聲明引用時必須指定它代表的是哪一個變量,即對它初始化。

int &a=b;這樣是聲明a是變量b的引用

如果是int &a;這樣就是錯的,沒有指定a代表哪一個變量。

b)  引用與其所代表的變量共享同一內存單元,系統並不爲引用另外分配存儲單元;

這個應該好理解;就像前面所說的,張三和三娃子都是同一個人,三娃子只是張三的別名。

因此,對於 int &a=b;這個例子來說,要輸出a和b 的地址,肯定是相同的。

c)  怎樣區分&是引用還是取地址符呢?方法是:判斷&a這樣的形式前是否有類型符

int &a=b;如果有類型符(int)則是引用,否則是取地址運算符。

d)  引用的初始化,可以是一個變量名,也可以是另一個引用

換句話說:張三的別名可以是三娃子,三小子……及其他多個別名

而三娃子也可以有其他的別名,比如說:老三,小三等

用程序可以這樣:

int a=1; //這裏是定義一個整形變量

int &b=a;//聲明b是整型變量a的別名

int &c=b;//聲明c是整型引用變量b的別名

int &d=a;//聲明d是整型變量a的別名

e)  引用初始化後不能再被重新聲明爲另一變量的別名

即三娃子既然是指張三這個人,就不能讓其他人也叫三娃子

即一個別名只能對應一個原始變量,但是一個原始變量可以有多個別名,而且別名也可以

由自己的別名。

int &b=a;//這個聲明語句中的&是一個引用。。。int *p=&b;//這個指針初始化語句中的&是取地址運算符

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章