表示脫去解引用

2021-04-18 23:31:45 字數 1531 閱讀 8117

在c語言中,&符號大家一定很熟悉吧。

它除了可以作為按位運算「與」之外還有更常用的功能——取變數位址。

我們首先看下面乙個簡單的例子:

view plain

copy to clipboard

print?

class="csharp" name="code">#include "stdio.h"

int main(void)  

view plain

copy to clipboard

print?

#include "stdio.h"

int main(void)    

#include "stdio.h"

int main(void)

上面**中,指標p指向變數a的位址。在c/c++中,每個變數都有其相應的位址,通過在變數識別符號前加&符號即可獲得變數的位址。

那麼我們這麼寫可以嗎?int *p = &0x01000;

這顯然不行。因為對於乙個數值常量,它是沒有位址的。而變數之所以有位址就是因為要有乙個位址來存放變數的值。

我們再看下面的**:

view plain

copy to clipboard

print?

#include "stdio.h"

int main(void)   

#include "stdio.h"

int main(void)

上面**又是怎麼回事呢?

先前已經調查過變數a的位址——0x0012ff60,那麼這裡的指標p實際上也是指向變數a的位址。

首先,將0x0012ff60作為int*,這時它與&a是等價的。

然後*(int*)0x0012ff60表示取變數a的內容。

最後,&*(int*)0x0012ff60表示再脫去*(int*)0x0012ff60的解引用,相當於又變為(int*)&a。

因此,這裡的&與第乙個例子中的&是不同的語義。這裡的&不是取位址,因為乙個常量*(int*)0x0012ff60是沒有位址的。

所以這裡的&表示

脫去解引用。

再看下面的例子,加深印象:

view plain

copy to clipboard

print?

#include "stdio.h"

int main(void)  

#include "stdio.h"

int main(void)

在c++中,&還可以表示引用,這個就不多說了。

view plain

copy to clipboard

print

?

class="csharp" name="code">#include "iostream"

using

namespace std;  

int main(void)  

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

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

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

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

PERL 引用與解引用

perl 語言中的引用類似於c c 中的指標。標量 scalar 列表 list 雜湊 hash 函式 sub 檔案控制代碼 handle 都可以使用引用來標記。引用本身又是乙個標量。scal ref scal 標量引用 arr ref arr 列表引用 hash ref hashe 雜湊引用 ha...