對指標的基礎理解

2021-07-24 14:45:21 字數 1161 閱讀 6398

p和num的關係如上圖所示,p對應的記憶體空間裡儲存的是num對應記憶體空間的位址。如果進行p++操作,得到的是0x1004,因為int型變數是四個位元組,如果是num是char型,那p++的結果就是0x1001。這也是步長的概念,對指標加一,跳了多少位元組,步長就是多少。

如果進行(*p)++操作,得到的就是6。

這裡面牽扯到  對應的記憶體空間  和  指向的記憶體空間  的區別,對p來說,它對應的記憶體空間就是儲存0x1000的那個空間,p指向的記憶體空間則是它對應記憶體空間裡儲存的位址值對應的記憶體空間,也就是0x1000這個位址所代表的空間。p這個記憶體空間也是0x2000所指向的記憶體空間。

p  對應空間的位址;*p  對應指向空間的值。*p的意思就是找到p變數裡儲存的位址所對應的記憶體空間裡的內容。

如果再定義乙個int **  pp = &p

這裡**pp也等於5. pp 儲存的是p的位址。

可以得出下面一系列等式

num == **pp == *p

&num == *pp == p

pp == &p

個人感覺&與*就像正負號,放在一起就會抵消。不知這樣說對不對

p 中儲存的是字串首字元的位址

p + 1就是第二個字元的位址

下面這些還在迷糊中,先記住吧。。。

陣列名是乙個指標常量,儲存陣列首元素的位址。

對一維陣列的位址取值等於陣列首元素的位址。

對一維陣列名取位址等於陣列的位址。

二維陣列名是乙個指標常量,儲存首個一維陣列的位址。

對三維陣列的位址取值等於首個二維陣列的首個一維陣列的位址。

對指標的理解

指針對一部分初學者來說一直是乙個無法逾越的障礙,沒有指標的c語言就好像沒有左腿的短跑運動員。今天我來試試換一種方法來理解指標,希望能幫還在為指標掙扎的朋友們理清思路,高手略過即可。我們先認為記憶體是一家客棧 看起來這和老掉牙的大樓的比喻沒什麼區別,但是請你耐心看下去 同大部分的客棧一樣,這家客棧有天...

對指標的理解

在c語言中可以認為一切皆位址。int a 10 1 根據函式型別申請一塊記憶體,並將記憶體的名字命名為a 2 將10以二進位制補碼形式寫入記憶體 賦值 我們將這種通過變數名引用變數,由系統自動完成變數名和其儲存位址之間的轉換的方式,稱為變數的 直接引用 記憶體是線性,因為不同型別的變數占用不同大小的...

個人對指標的指標理解

每次一看到兩個 號,就頭疼,終於在一次看源 時,看了半天才弄明白其中含義,所以寫一寫對指標的指標的理解。int main 以乙個小例子來說明 我們將a指標稱為一級指標 因為a指標變數儲存的位址儲存的是乙個具體的數值或者字元,反正不再是位址值 b稱為二級指標,因為b是指向指標的指標,以此類推long ...