指針是C語言中的精髓部分,同樣也是C語言的難點所在,下面從最底層來分析C指針。
首先先放節(jié)論,這樣可能會節(jié)省部分人的閱讀時間。
對于一級指針:

對于二級指針:

同理我們有:
n級指針

需要注意的是,上面的所有指針都需要初始化,如果看懂了上面的圖,也就知道為什么必須初始化的原因了,其實指針實質(zhì)上是不存在的,編譯器會將其全部替換為地址,正因為如此,導致很多初學者被各種符號暈頭轉向,如同普通變量一樣,指針也是一種變量,說到底,變量其實也不存在,在編譯器編譯的過程中,所有的變量會被替換掉,真正有用的只是變量的值, 如果想詳細了解此類容,讀者可以看編譯原理這本書。
下面我們來驗證上面的結論

上面我采用了直接強制轉換的方式來分配地址,這個并不是每次執(zhí)行都會成功,原因是強行分配的地址很可能恰好被使用或者是內(nèi)存碎片再或者沒有進行字節(jié)對齊,這些都會導致強行分配地址時失敗,因此可以多進行測試,下面得到輸出。

現(xiàn)在無法知道,為了直觀,我們直接打開Debug調(diào)試,同時設置斷點,現(xiàn)在我們打開Memory dump,如圖所示

x86結構的內(nèi)存結構為大端模式,低字節(jié)放到高地址。
此時我們輸入0x60fef2,點擊"GO",可以看到內(nèi)存中的數(shù)據(jù)如下圖所示:

可以看到內(nèi)存地址為0x60fef2處的數(shù)據(jù)為5
然后輸入0x60fefc點擊"GO",可以看到內(nèi)存中的數(shù)據(jù)如下圖所示:

可以看到內(nèi)存地址為0x60fefc處的數(shù)據(jù)為0x60fef2
可以看到這個完全符合上面的節(jié)論,
需要說明的是,我們寫程序時雖然使用了 p, &p, *p這三個符號,但是計算機編譯過程中只有兩個有用的數(shù)據(jù)
-
內(nèi)存
+關注
關注
8文章
3159瀏覽量
75976 -
C語言
+關注
關注
183文章
7634瀏覽量
144187 -
指針
+關注
關注
1文章
484瀏覽量
71630 -
C指針
+關注
關注
0文章
10瀏覽量
6521
發(fā)布評論請先 登錄
C語言指針詳細解析
c語言函數(shù)指針定義,指針函數(shù)和函數(shù)指針的區(qū)別
基于C語言中指針的基本用法解析
C語言指針詳細解析
C語言中的懸空指針和野指針是什么意思?
詳解C語言指針底層基本原理
C++智能指針的底層實現(xiàn)原理

底層解析C指針(一)
評論