指向指標的指標 詳解

2021-06-26 21:01:49 字數 1048 閱讀 8201

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

引用文章相關段落如下:

1

2

inti = 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 的位址。

簡單點就是:

&:取址。

* :取值。

初始化表示式**ipp = &ip1表示的是 ipp這個變數所儲存的值是&ip1

而*ipp = *(&ip1) = ip1

因此*ipp = ip2實際上就是ip1 = ip2

要替換掉ipp中所儲存的值,則要用ipp = &ip2這個表示式。

指向指標的指標

理解二級指標,關鍵是理解指標的儲存方式和意義。這裡以指向int型指標的指標為例,梳理一下二級指標在記憶體分配中 的奧妙.include using namespace std int main int p a int point p cout a a endl p p endl p p endl p...

指向指標的指標

這幾天我下意識地琢磨到底 錯了,今天猛然明白了他的想法,其實這個技術點我早已掌握,只是當時對問題未深入思考,把握得較模糊,一時沒洞察他的思路,疏忽了。問題大概是這樣的 寫乙個函式,將乙個二維陣列作乙個變換。void rotate array 開闢備份空間 根據變換要求將元素一一賦值 因為這個方法並不...

指向指標的指標

一 回顧指標概念 讓我們先回顧一下指標的概念吧!當我們程式如下申明變數 short int i char a short int pi 程式會在記憶體某位址空間上為各變數開闢空間,如下圖所示。圖中所示中可看出 i 變數在記憶體位址5的位置,佔兩個位元組。a變數在記憶體位址7的位置,佔乙個位元組。接下...