C語言中 * 和 &的實際理解

weixin_34249678發表於2017-06-01

& 是位操作運算子 *代表指標

在C語言中 

&可以用來拿到變數在記憶體中儲存的地址 

*可以用來拿到對應地址中的具體內容

比如 :

int a=123;

直接printf        printf("a = %d",a);       可以直接獲得 列印 123 內容

直接 printf       printf("a = %p",&a);    列印的地址是 0x.............一個十六進位制的地址

那麼我們定義一個指標變數

int *b = NULL;

b = &a;  //*b代表指標變數 而 b只能賦值為地址 

當我們想要拿到指標 *b 中的內容的時候     printf("%d",*&b);    列印的結果與a變數是一樣的

在之前 我們已經把變數a的值賦給了*b  

現在 *b的值也就是 123

如果我們對 *b的值進行重新賦值

*b = 512;

那麼列印結果 

printf("a = %d\n",a);

printf("b = %d\n",*b);

// a = 512  b = 512;

為什麼會這樣呢?

因為在賦值之後 指標*b  指向 變數a 這個時候 相當於 指標*b直接指向了 a的記憶體 所以 對指標*b做修改的時候就是對那塊記憶體中的內容進行修改 所以修改了 *b後 變數a中的內容也也會被修改


最終總結我的理解 只有一句話

&是為了拿到變數的記憶體地址  而 *就是為了拿到對應記憶體地址中的內容

相關文章