在c語言中,&符號大家一定很熟悉吧。
它除了可以作為按位運算「與」之外還有更常用的功能——取變數位址。
我們首先看下面乙個簡單的例子:
view plain
copy to clipboard
print?
class="csharp" name="code">#include "stdio.h"int main(void)
view plaincopy 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"在c++中,&還可以表示引用,這個就不多說了。int main(void)
view plain
copy to clipboard
?
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...