如果你不太清楚int *和char *的區別,看完這道題,可能就會有所感悟。
一個字符數組a,初始化成:
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 然后定義三個指針,分別是:
short * int * int64 *這里把 int64 理解成 8 個字節的整數就行,不用管它是不是真的存在。
三個指針都初始化成數組名a,也就是數組第一個元素的地址,假設數組首元素地址是 0x100,那三個指針的值都是 0x100。
如果畫出來,就是這樣的。
下面就要來搞清楚 short * 和 int * 的區別。
所謂short *,表示一個指針,指向的是short類型的數據。在32位系統中,short類型占2字節,所以指針指向的是這兩個字節。如果讓指針加一,它也會跳過兩個字節。
同理,如果是int *類型,也表示一個指針,指向int類型的數據,在32位系統中,int類型占4字節,所以指針指向的是這4個字節,如果讓指針加一,他也會跳過4個字節。
再回到數組上,因為三個指針類型不同,所以指向的數據長度也不同。
接下來就是取值操作。
*p1就是取指針 p1 指向內存的值,但是并不能簡單的認為結果是0x0102。也有可能是0x0201。
還好題目一開始說了,32位系統,小端字節序。
所謂小端,就是高地址保存高字節。
在數組里面,下標為 0 的元素一定是低地址,所以01應該就是低字節。
于是 *p1 是 0x0201。
*(p1 + 2)應該會跳過4個字節,剛才說了,short *類型的指針,加一會跳過2個字節。所以*(p1 + 2)的結果是0x0605。
p3因為指向了8個字節,所以*p3是0x0807060504030201。
最后一個*(p2 + 2),p2是int類型的指針,加2跳過了8個字節,表示的是最后4個字節的地址,取值的結果就是0。
-
數據
+關注
關注
8文章
7002瀏覽量
88943 -
數組
+關注
關注
1文章
417瀏覽量
25939
原文標題:從面試題入手,分析不同指針類型的區別
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論