區分指標加一和普通型別(如int 、
char
、double)加一
指標加一:指標加一包括普通指標(如int *...)、陣列指標、結構體指標等等,對指標進行加
1型別為t(如
int (*) [5]
的陣列指標型別)
的指標移動,是以sizeof(t)為移動單位。
普通變數加一:普通變數加一其實就是數學上的加一操作。位址如果轉換成普通變數,需要注意該普通變數的型別的數值範圍是否可以容納下位址的數值大小而不發生數值丟失。
需要注意的是,當你把位址前置裝換成char型別是會出錯的,是因為
char
型別的記憶體空間(
1位元組)有限,也就是他的值得範圍是有限的,所以你把位址前置轉換成
char
後再轉成
int *
型別(或者其他指標型別)去解析,很有可能會出現段錯誤(應該是一定會出現段錯誤,因為對應
char
的數值範圍大小的記憶體區間是
kernel
用的位址空間,拒絕訪問)。
總結:指標移動的目的就是為了去訪問記憶體位址。而記憶體位址抽象出來的就是數字,我們進行指標訪問時,需要移動指標其實就是對記憶體位址的數值進行加減運算,使得我們的指標指向我們想要訪問資料的記憶體空間的頭位置處,然後在通過強制型別轉換(如果型別匹配,也可以不用強制型別轉換),用我們想要的解析方法去讀取該記憶體空間的數。
**演示:
#includetypedef列印的結果:struct
test
test;
int main(void
)
陣列指標一些理解
printf d p 注意此處是先進行後面的運算p printf d p printf d n p i 此時指標就相當於陣列名 printf 2d p 如果陣列是a 6 則應該列印 printf 2d a 0 與上結果 1 a 是陣列首元素的位址,所以 a 的值和 a 0 的值相同,另一方面,a 0...
c指標的一些理解
c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可以說是相反的。右左...
關於指標的一些理解
指標陣列是陣列,是乙個存放指標的陣列。eg int arr1 10 整形指標陣列,有十個元素,每個元素都是整形指標。char arr2 4 字元指標陣列,有四個元素,每個元素都是字元指標。char arr3 5 陣列有5個元素,每個元素是字元型的二級指標。陣列指標是指標,是乙個指向陣列的指標。eg ...