行指針的用法 C語言行指針?
C語言行指針?例如,定義一個二維數(shù)組int a[3][4]={1,2,3,4},{5,6,7,8},{9,10,11,12}數(shù)組名,a是行指針,[0]是列指針。以本例為例,雖然a和a[0]地址相同,但
C語言行指針?
例如,定義一個二維數(shù)組int a[3][4]={1,2,3,4},{5,6,7,8},{9,10,11,12}數(shù)組名,a是行指針,[0]是列指針。以本例為例,雖然a和a[0]地址相同,但指針類型不同,指針類型不同1運算,顯然結(jié)果不同,所以(row pointer)1中的“1”表示一行中所有元素占用的字節(jié)數(shù),而a[0]1,其中1是元素占用的字節(jié)數(shù),是兩個不同的概念。為了解釋這個令人困惑的問題,我們可以用軍事訓練中的排隊點名來解釋。班長逐一檢查班里的士兵是否在排隊。班長每次移動都會經(jīng)過一個士兵,而排長只檢查排里的所有班級是否都在場。排長只從0班出發(fā)點到1班出發(fā)點。他似乎只走了一步,但實際上他跳過了10個士兵,這相當于一個1。班長面向士兵,排長面向班級,班長相當于列指針,排長相當于行指針。為了在一個類中找到一個士兵,我們必須給出兩個參數(shù)
簡而言之,指針是一個表示地址的無符號整數(shù)。
所以僅僅理解指針是不夠的。您還需要知道指針指向的數(shù)據(jù)空間是如何排列的。這可能涉及到一些與特定CPU/OS相關(guān)的知識。如果我們能用計算機體系結(jié)構(gòu)的知識來理解它,它會更深刻、更準確。
例如:
如何存儲float/double/long double?
如何在數(shù)據(jù)空間中組織陣列?
字符串是如何存儲的?
如何存儲結(jié)構(gòu)和聯(lián)合體?
位域組織
具體CPU相關(guān)部分如下:
整數(shù)的存儲將涉及CPU大小的指定
浮點數(shù)的存儲直接關(guān)系到FPU的設計
此外,還有一些擴展知識,涉及內(nèi)存的分配和釋放:如何在程序中分配內(nèi)存?(malloc/free)
什么是堆和堆棧?
總而言之:指針是地址和整數(shù)。但要充分利用它,我們需要了解計算機存儲空間的分配。困難在這里,突破在這里。