引言
到了春季的三四月份,東區的各大實驗室都開始陸續納新。大多數的納新試題都考到了c語言有關的知識,看到3g實驗室的一道題,這讓我想起當我面試實驗室的時候的一道題,非常有趣,今天我來和大家分享一下這道題
#include int main (); int*ptr1=(int*)(&a+1); int*ptr2=(int*)((int)a+1); printf("%x,%x",ptr1[-1],*ptr2); return 0;}
這道題涉及到了指標,陣列,強制型別轉換以及運算子的優先順序和大端序小端序,主要是體會指標指向的特點。
在我電腦上輸出的值是 4,0200 0000(2000000)
然後讓我給大家詳細的分析一下這道題;
a是乙個具有4個整型變數的陣列的名字, &a是陣列的首位址。&a+1表示讓指標指向下乙個資料,於是a的指向了4的下乙個位址,用此來初始化ptr1,所以part1的指向如下:
在ptr1初始化的時候,令&a+1強制轉換成整型指標,所以 ptr1[-1]相當於把ptr1往前挪乙個整型大小,即4個位元組,然後呢,
所以呢,列印出的第乙個數字是a[3]的內容,即4!
第二部分
ptr2先將a組數轉化成整形變數,然後加1然後再轉化成整形指標,所以此時 ptr2的指向在
然後因為整形為四個位元組,所以此時指向的是a的後三個位元組和a[1]的第乙個位元組,具體如下圖(在x86系統下的資料儲存),
因為x86系統是小端序,讀取資料或儲存資料的時候是最低位對應低位址,所以列印
0200 0000。
C語言指標例項詳解
include a是指標變數 a就代表儲存位址 void test1 int a printf 指標與位址 n int var 20 實際變數的宣告 int ip 指標變數的宣告 int var 20 int ip var 等價於 ip ip 等價於 var ip 就相當於儲存位址 int var1...
關於C語言指標陣列的幾個例項
1.用指向指標的指標的方法對5個字串排序並輸出 include include int sort char p return 1 void main sort p for i 0 i 5 i printf s p i printf n 2.用指向指標的指標的方法對n個整數排序並輸出。要求將排序的方法...
C語言指標入門的簡單例項教程
c語言的指標的存在使得c語言對硬體的操控,以及靈活性得到了極大的提高。但是指標的使用存在著很多難點問題。include include 這裡的函式是指標做引數的例子,要知道這個特性可以彌補c語言只能有乙個返回值的特性。void swap1 int pa,int pb main 函式必須要返回乙個數字...