C語言學習之指針
阿新 • • 發佈:2019-03-15
我們 接受 是個 兩種 理解 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是一個只能存內存地址的指針變量,既然地址對應著值,那麽這個值怎麽求呢?
還是用 * 號,但是此*號不同於變量聲明時候的*號,這個*號是取值符, 取出指針所指向地址的值。
intvar = 20; /* 實際變量的聲明 */ int * ip; /* 指針變量的聲明 */ ip = &var; /* 在指針變量中存儲 變量var 的地址 */ /* 使用取值符*求得指針變量(地址)對應的值 */ printf("Value of *ip variable: %d\n", *ip ); return 0;
對於&,就像之前說的那樣,放在變量前面:,是取址符, 任何變量都是放在內存中的, 取址符&就是獲得變量在內存中地址。
所以,下面兩種寫法都是錯的:
p = var; // Error: 指針變量只能存儲地址, 給指針賦值其他類型的數據顯然不對 *p = &var //左邊*p取值之後是個int型數值,而右邊是求址符,是一個內存地址,顯然不是一個東西
C語言學習之指針