1. 程式人生 > >C語言學習之指針

C語言學習之指針

我們 接受 是個 兩種 理解 ror 棧內存 就是 var

指針這塊,看了好久才有點頭緒,稍微有點理解了。

一、指針申明以及賦值

int *p;

這樣就聲明了一個int型的指針p,這個p就是指針變量,可能上述的書寫方式會混淆我們隊指針的理解(*號)

我們可以這樣看:

int *  p;

int型指針變量---------------------->p;這個*和p分開的話,也是可以解析的。

然後重點來了,這個指針變量賦值的時候只能接受內存地址,對,是內存地址,並且只能是變量計算後的地址(&符計算的內存地址)

   int  var = 20;    /* 實際變量的聲明 */
   int  * ip;            /*
指針變量的聲明 */ ip = &var; /* 在指針變量中存儲 變量var 的地址 */ ip = &2; /*基本數據類型求地址會報錯*/

也就是說指針變量只能存儲(接受)棧內存的地址。

對於內存,你只需要知道計算機的內存被編組為“地址-”這樣的關系對。

二、指針值的計算

上面我們知道對於int * ip來說,這個ip是一個只能存內存地址的指針變量,既然地址對應著值,那麽這個值怎麽求呢?

還是用 * 號,但是此*號不同於變量聲明時候的*號,這個*號是取值符, 取出指針所指向地址的值。

   int
var = 20; /* 實際變量的聲明 */ int * ip; /* 指針變量的聲明 */ ip = &var; /* 在指針變量中存儲 變量var 的地址 */ /* 使用取值符*求得指針變量(地址)對應的值 */ printf("Value of *ip variable: %d\n", *ip ); return 0;

對於&,就像之前說的那樣,放在變量前面:,是取址符, 任何變量都是放在內存中的, 取址符&就是獲得變量在內存中地址。

所以,下面兩種寫法都是錯的:

p = var
; // Error: 指針變量只能存儲地址, 給指針賦值其他類型的數據顯然不對 *p = &var //左邊*p取值之後是個int型數值,而右邊是求址符,是一個內存地址,顯然不是一個東西

C語言學習之指針