C/C++指向指標的指標

pan_jinquan發表於2016-11-28

我在一篇教程中看到下面這段,它描述指向指標的指標是如何運作的。

引用文章相關段落如下:

int i = 5, j = 6, k = 7;
int *ip1 = &i, *ip2 = &j;
現在我們可以這麼寫:

int **ipp = &ip1;

那麼現在指標 ipp 指向了 ip1,ip1 指向了 i。*ipp 就是 ip1,**ipp 就是 i,或者說是 5。我們可以用我們熟悉的盒子箭頭圖來描述,像這樣:


如果我們接著這麼寫:

*ipp = ip2;

我們就改變了 ipp 指向的那個指標(也就是 ip1),現在它指向 ip2 所指的地方。也就是說(ip1)現在它指向了 j:


我的疑問是:為什麼在第二幅圖裡,ipp 還是指向 ip1 而不是 ip2?

最佳答案:

讓我們暫時忘掉那些關於指標的各種類比。指標實際上存放的是記憶體的地址。

& 符號的意思是取地址,也就是返回一個物件在記憶體中的地址。

* 符號的意思是取得一個指標所指向的物件。 也就是如果一個指標儲存著一個記憶體地址,那麼它就返回在那個地址的物件。

所以當你這麼寫時 *ipp = ip2,實際上是把 ipp 存的地址所對應的物件,也就是 ip1 取到,然後把 ip2 存的值賦值給 ip1,也就是 j 的地址。

簡單點就是:
&:取址。
* :取值。

相關文章