指標和陣列的經典習題

2021-08-17 13:20:24 字數 3138 閱讀 3255

練習1:

#include 

int main()

; int

*ptr = (int

*)(&a+1);

printf("%d,%d", *(a+1), *(ptr-1));

return

0;}

&a表示的是整個陣列,&a+1則表示陣列a後邊的下乙個陣列,這裡它強制轉換成(int*),則百(&a+1)變為4位元組,即5後邊的四個位元組,*(ptr-1)即是 5;

*(a+1)這裡的a表示的是陣列的位址,也是陣列首元素的位址,*(a+1)則表示陣列的第二個元素即2;

執行結果如下:

&陣列名 和 sizeof(陣列名),這裡的陣列名都表示的是整個陣列。

練習2:

struct test

*p;int main()

假設p的值為0x00000

這裡定義了乙個結構體,根據結構體的記憶體對齊,可以算出這個結構體的大小為20位元組,則sizeof(*p)為20;

p+1即指向下乙個結構體,因此它的位址為0x00014;

(unsigned long)p這裡要特別注意,p本來是指標,這裡將它強轉為unsigned long這裡的p不在是指標,而是乙個無符號整數,因此給p加一,即為1;

(unsigned int*)p這裡也對p進行了強制型別轉換,p變成了指向無符號整形數的乙個指標,對指標加1,即加四個位元組,因此這裡為0x00004;

執行結果如下:

練習3:

int main()

; int

*ptr1 = (int

*)(&a+1); //

4int

*ptr2 = (int

*)((int)a+1);//

2000000

printf("%x, %x\n", ptr1[-1],*ptr2);

}

這裡的&a+1表示下乙個陣列,然後(int*)進行強制型別轉換後,佔四位元組,ptr1[-1]即*(ptr1-1)表示的是a陣列的最後乙個元素即4;

(int(a)+1),這裡有個大坑,它將陣列的首元素的第乙個位元組的位址進行強制轉換成整形,+1在轉換成整形指標,解引用後是這四個位元組的位址。

如圖:

這裡在求值的時候又有乙個坑,特別要注意大小端,否則依然無法做對。

執行結果如圖:

練習4:

#include 

int main(int argc, char * argv)

; int

*p; p = a[0];

printf("%d\n", p[0]);

return

0;}

這裡的坑就是一定要注意陣列賦值時的逗號表示式。

執行結果如圖:

練習5;

int main()

這裡的 int(*p)[4]定義了乙個陣列指標,每個指標指向乙個含四個元素的陣列,這裡的&p[4][2],可以看成(*(p+4)+2);因此指向如圖的位置,還有就是%p列印的位址為無符號整形,具體如圖所示:

執行結果如圖:

練習6:

int main()

; int

*ptr1 = (int

*)(&aa+1);

int*ptr2 = (int

*)(*(aa+1);

printf("%d,%d",*(ptr-1),*(ptr2-1));

}

這裡需要注意的是&陣列名為整個陣列。答案為10,5;

執行結果如圖:

練習7:

int main()

; char**pa = a;

pa++;

printf("%s\n", *pa);

return

0;}

*a為乙個陣列指標,pa為乙個二級指標,它是陣列指標的指標,pa++相當於指向第二個陣列指標,解引用則為第二個陣列 「at」;

執行結果如圖:

練習8:

#include 

int main()

; char**cp = ;

char**

*cpp = cp;

printf("%s\n", **++cp);

printf("%s\n", *--*++cp+3);

printf("%s\n", *cpp[-2]+3);

printf("%s\n", cpp[-1][-1]+1);

}

根據**先畫出下圖:綠色的線代表位址指向

指標和陣列相關的練習題。

前幾天學完了指標,今天就來做一些經典的題來鞏固自己的知識。1.int main int ptr int a 1 printf d,d a 1 ptr 1 return 0 解析 首先這道題答案是2,5.因為首先它先定義乙個陣列,然後定義乙個指標變數指向下乙個陣列。a 1表示對第二個元素的位址,在解引...

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...