我在一篇教程中看到下面這段,它描述指向指標的指標是如何運作的。
引用文章相關段落如下:
1
2
int
i = 5, j = 6, k = 7;
int
*ip1 = &i, *ip2 = &j;
現在我們可以這麼寫:
1
int
**ipp = &ip1;
那麼現在指標 ipp 指向了 ip1,ip1 指向了 i。*ipp 就是 ip1,**ipp 就是 i,或者說是 5。我們可以用我們熟悉的盒子箭頭圖來描述,像這樣:
如果我們接著這麼寫:
1
*ipp = ip2;
我們就改變了 ipp 指向的那個指標(也就是 ip1),現在它指向 ip2 所指的地方。也就是說(ip1)現在它指向了 j:
我的疑問是:為什麼在第二幅圖里,ipp 還是指向 ip1 而不是 ip2?
讓我們暫時忘掉那些關於指標的各種模擬。指標實際上存放的是記憶體的位址。
& 符號的意思是取位址,也就是返回乙個物件在記憶體中的位址。
* 符號的意思是取得乙個指標所指向的物件。 也就是如果乙個指標儲存著乙個記憶體位址,那麼它就返回在那個位址的物件。
所以當你這麼寫時 *ipp = ip2,實際上是把 ipp 存的位址所對應的物件,也就是 ip1 取到,然後把 ip2 存的值賦值給 ip1,也就是 j 的位址。
簡單點就是:
&:取址。
* :取值。
二級指標理解
1 先看一反例 目的 通過函式mymalloc改變指標p的值 include include void mymalloc char s 我想在函式中分配記憶體,再返回 void main 以上例子中,p實際還是null,p的值沒有改變,為什麼?答 我們的目的就是要改變指標p的值,因為p本身就是指標,...
二級指標的理解
今天看到一段關於二級指標的使用,如下 include int main 執行後的輸出結果如下 a 0xbfe9f968 b 0xbfe9f964 c 0xbfe9f964 c 0xbfe9f964 c 0xbfe9f968 c 12按照輸出理解,首先 c先寫成 c 的形式,c先指向b,然後此表示式可...
關於二級指標的理解
include void main charp int i for i 0 i 4 i 首先我們要明白,如果定義乙個字串陣列a 4 其實就是乙個一級指標,放的是第乙個字元的首位址,a 1放的就是第二個字元的首位址。這個也不難理解,同理我們知道n是乙個二維指標n裡面放的是a 0 的位址,a 0 放的是...