C語言星號作用區分和多級指標的理解

2021-10-22 18:45:23 字數 765 閱讀 3796

首先對指標分級要有乙個比較清晰的認知:

變數本身一定會有乙個記憶體位址,不管他是基本型別變數或是指標型變數

指標型變數所儲存的值是他指向的記憶體的位址

定義的時候 int* 代表指向一塊int變數記憶體位址的指標int** 代表指向一塊int變數指標的記憶體的指標

這麼說可能不太好理解,看下面這個圖可以幫助理解

這個圖也可以很好的解決為什麼列印&a是乙個位址,而列印&ap是另乙個位址,因為&ap指向的並不是a的位址。

然後要區分一下*號所處的語義上下文

比如,int * a ,這個情況下,號所處上下文是變數定義的上下文,這個時候號的作用實際上是這麼來看的int* a,可以把int和*看成乙個整體,語義就是這是乙個指向int型變數的指標。

另一種情況下*a,這個情況下a必然是個指標,因為 * 號的語義是去a位址(所以a才必須是指標)取出對應的值。

理解了以上兩點,基本就理解了多級指標了

比如 * * * * p,是在做什麼呢,按照之前邏輯來分析,大概就是

通過*層層取出位址對應的值,最後指向結果pvvvv,pvvvv是型別的值取決於它自己存放的型別,不出錯的情況下pvvvv就是pvvv的指標的指向型別

C語言 多級指標 解引用

1.解引用 int main int a 10 int b 20 printf d d n a,b 10 20 int p a p裡儲存a的位址 p 100 對p解引用,將p指向的位址的內容賦為100 p b p指向b p 200 將p指向的位址的內容賦為200 printf d d n a,b 1...

C語言之多級指標

指標用途 1 使程式簡潔 緊湊 高效 2 記憶體的動態分配 3 記憶體位址的直接處理 4 函式呼叫時批量引數的傳遞 5 複雜資料結構的簡潔表達等許多其它資料型別難以實現的複雜操作 等等 一 多級指標 1 為什麼需要使用二級指標 使用二級指標是為了函式呼叫結束可以使作為函式實參的指標的值的改變保留下來...

C語言學習筆記 指標 多級指標

指標的指標 如果乙個指標變數存放的是另乙個指標變數的位址,則稱這個指標變數為指向指標的指標變數。假如定義了乙個二級指標 int q 對於上述例子的二級指標,我們可以把int q拆分成兩部分看 即int 和 q 後面 q 中的 表示 q 是乙個指標變數,前面的int 表示指標變數 q 只能存放int ...