關於C中指標的引用,解引用與脫去解引用

2021-07-31 22:53:28 字數 993 閱讀 4604

*,& 在指標操作中的意義

(1)*

大家都知道在寫int *p 時,*可以宣告乙個指標。很少人知道*在c/c++中還有乙個名字就是「解引用」。他的意思就是解釋引用,說的通俗一點就是,直接去尋找指標所指的位址裡面的內容,此內容可以是任何資料型別,當然也可以是指標(這就是雙重指標,後面將會討論)。需要注意的是,在變數宣告的時候,*不能當做解引用使用,只是表示你宣告的變數是乙個指標型別。

example1:

int a=50;

int *p=&a;// '&'的作用就是把a變數在記憶體中的位址給提取出來,具體後面解釋。

*p=5;//這就是解引用,*解釋了 p對常量 50的記憶體位址的引用,解釋結果就是直接去尋找p所指內容,因為p指向a,所以a的內容將被修改為5,而不是50。

(2) &

&表示的是引用,有&符號,就表示函式內的變數和主函式的變數是同乙個,函式內改變它的值,主函式相應的變數也就跟著改變了;沒有&符號,就表示函式內的變數是主函式的變數的乙個副本,在函式內改變其值,是不會改變主函式中變數的值的。

& 在c/c++中具體 3種語義, 按位與,取位址 和 宣告乙個引用。

int a=0x0000002 & 0x00000003;//按位與

int *p=&a;//取位址,取出a在記憶體中的位址給p,這樣就建立乙個指標對映,使得p指a

int &a=b;//宣告a是b的引用,對a操作修改也就是直接對b修改。

在指標操作中,&還有一種叫法叫做「脫去解引用」,在這個表示式中&*p(假設p是指標),&脫去了*對a的解引用,從而得到抵消的效果,得到應該是p所指的變數的位址。

example2:

接example1。

println(「%x ||||| %x」,&p,&*p);

輸出結果:

p在記憶體中的位址|||||a在記憶體中的位址

為什麼呢?

首先&去指標p的位址,然後&脫去了p對a中5的引用,解引用和脫去解引用效果抵消,從而得到了p所指的變數的位址,也就是a在記憶體中的位址。

關於C中指標的引用,解引用與脫去解引用

在指標操作中的意義 1 大家都知道在寫int p 時,可以宣告乙個指標。很少人知道 在c c 中還有乙個名字就是 解引用 他的意思就是解釋引用,說的通俗一點就是,直接去尋找指標所指的位址裡面的內容,此內容可以是任何資料型別,當然也可以是指標 這就是雙重指標,後面將會討論 需要注意的是,在變數宣告的時...

C 中指標與引用區別

1.都是位址的概念 指標指向一塊記憶體,它的值為該塊記憶體的位址。引用是某塊記憶體的別名。1.指標是實體,引用只是乙個別名。2.使用時,引用需要解引用,指標不需要。解引用指獲得該記憶體位址處儲存的值 3.引用從一而終,指標可多變。給引用賦值修改的是該引用所關聯的物件的值,而並不是使引用與另乙個物件關...

C 中 指標引用)與 (指標)的區別

指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...