練習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...