指針是C語(yǔ)言中的精髓部分,同樣也是C語(yǔ)言的難點(diǎn)所在,下面從最底層來(lái)分析C指針。
首先先放節(jié)論,這樣可能會(huì)節(jié)省部分人的閱讀時(shí)間。
對(duì)于一級(jí)指針:
對(duì)于二級(jí)指針:
同理我們有:
n級(jí)指針
需要注意的是,上面的所有指針都需要初始化,如果看懂了上面的圖,也就知道為什么必須初始化的原因了,其實(shí)指針實(shí)質(zhì)上是不存在的,編譯器會(huì)將其全部替換為地址,正因?yàn)槿绱?,?dǎo)致很多初學(xué)者被各種符號(hào)暈頭轉(zhuǎn)向,如同普通變量一樣,指針也是一種變量,說(shuō)到底,變量其實(shí)也不存在,在編譯器編譯的過(guò)程中,所有的變量會(huì)被替換掉,真正有用的只是變量的值, 如果想詳細(xì)了解此類(lèi)容,讀者可以看編譯原理這本書(shū)。
下面我們來(lái)驗(yàn)證上面的結(jié)論
上面我采用了直接強(qiáng)制轉(zhuǎn)換的方式來(lái)分配地址,這個(gè)并不是每次執(zhí)行都會(huì)成功,原因是強(qiáng)行分配的地址很可能恰好被使用或者是內(nèi)存碎片再或者沒(méi)有進(jìn)行字節(jié)對(duì)齊,這些都會(huì)導(dǎo)致強(qiáng)行分配地址時(shí)失敗,因此可以多進(jìn)行測(cè)試,下面得到輸出。
現(xiàn)在無(wú)法知道,為了直觀,我們直接打開(kāi)Debug調(diào)試,同時(shí)設(shè)置斷點(diǎn),現(xiàn)在我們打開(kāi)Memory dump,如圖所示
x86結(jié)構(gòu)的內(nèi)存結(jié)構(gòu)為大端模式,低字節(jié)放到高地址。
此時(shí)我們輸入0x60fef2,點(diǎn)擊"GO",可以看到內(nèi)存中的數(shù)據(jù)如下圖所示:
可以看到內(nèi)存地址為0x60fef2處的數(shù)據(jù)為5
然后輸入0x60fefc點(diǎn)擊"GO",可以看到內(nèi)存中的數(shù)據(jù)如下圖所示:
可以看到內(nèi)存地址為0x60fefc處的數(shù)據(jù)為0x60fef2
可以看到這個(gè)完全符合上面的節(jié)論,
需要說(shuō)明的是,我們寫(xiě)程序時(shí)雖然使用了 p, &p, *p這三個(gè)符號(hào),但是計(jì)算機(jī)編譯過(guò)程中只有兩個(gè)有用的數(shù)據(jù)
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3121瀏覽量
75238 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141587 -
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
71178 -
C指針
+關(guān)注
關(guān)注
0文章
10瀏覽量
6480
發(fā)布評(píng)論請(qǐng)先 登錄
C語(yǔ)言指針詳細(xì)解析
C指針詳解
C語(yǔ)言指針電子教程
C語(yǔ)言指針解析
c語(yǔ)言函數(shù)指針定義,指針函數(shù)和函數(shù)指針的區(qū)別
基于C語(yǔ)言中指針的基本用法解析
從最底層的內(nèi)存存儲(chǔ)空間開(kāi)始帶你了解C語(yǔ)言指針

C語(yǔ)言-一維指針定義與使用
C語(yǔ)言指針詳細(xì)解析

C語(yǔ)言中的懸空指針和野指針是什么意思?
底層解析C指針(二)

詳解C語(yǔ)言指針底層基本原理
C++智能指針的底層實(shí)現(xiàn)原理

評(píng)論