我一直弄不清楚」指標陣列「和」陣列指標「的區別,最近這段時間看到了一些關於陣列和指標的關聯和區別的資料,然後總結了下這兩個概念的區別,以備後續檢視。
1、區分指標陣列和陣列指標
short *ptr[10]; //指標陣列,可理解為:存放指標的陣列
short (*ptr1)[10]; //陣列指標,可理解為:指向陣列的指標
ptr為指標陣列,可以這麼看(short *) ptr[10],即ptr首先是長度為10的陣列,其型別為(short *)型,或者說該陣列的元素型別是指標型別;
ptr1是陣列指標,可以這麼看(short [10]) *ptr1,即ptr1首先是指標,該指標指向的是長度為10的shor型陣列,或者說該指標儲存的是長度為10的short型陣列的位址,可以如下初始化ptr1:
short a[10];
ptr1 = &a;
2、sizeof與指標陣列、陣列指標
(1)short *p1[100];
sizeof(p1) = 400;
sizeof(p1[0]) = 4;
sizeof(*p1) = 4;
sizeof(*p1[0]) = 2;
分析:這裡p1為指標陣列,根據上述分析p1的元素型別是short *
sizeof(p1[0]) = sizeof(*p1) = 4(注:任意指標的sizeof大小均為4);
*p1[0] 為short型,sizeof(*p1[0]) = sizeof(short) = 2 ;
故,sizeof(p1) = 100 *sizeof(short *) =100 *
4 = 400;
(2)short (*p2)[100];
sizeof(p2) = 4;
sizeof(p2[0]) = 200;
sizeof(*p2[0]) = 2;
sizeof(*p2) = 4;
分析:p2是陣列指標,根據上面的分析p2為指標,相當於如下定義:short p2[100];
所以,sizeof(p2) = 4,sizeof(*p2) = 4;
p2[0] = short [100],sizeof(p2[0]) = 100 * sizeof(short) = 100 * 2 =200;
*p2[0] = p2[0][0],所以有:sizeof(*p2[0]) = sizeof(short) = 2;
(3)short (*p3[5])[3];
sizeof(p3) = 20;
sizeof(p3[0]) = 4;
sizeof(*p3) = 4;
sizeof(*p3[0]) = 6;
sizeof((*p3[0])[0]) = 2;
分析:關於宣告從名字開始讀,然後按照優先順序順序讀取(詳細方法見《c專家程式設計》第三章p65)
這裡p3是指標陣列,該陣列有5個元素,每個元素都是乙個指標,每個指標都指向乙個含有3個元素的陣列;
所以,sizeof(p3) = 5 * sizeof(short *) = 5 * 4 = 20;
p3[0]仍然是指標,指向陣列short [3],sizeof(p3[0]) = sizeof(short *) = 4;sizeof(*p3) = 4;
*p3[0] 相當於指標p3[0]的解引用,指向第乙個陣列的起始位址,所以sizeof(*p3[0])相當於求第乙個陣列的記憶體大小:sizeof(*p3[0]) = sizeof(short [3]) = 3 * sizeof(short) = 6;
(*p3[0])[0] 相當於陣列的第乙個元素,相當於*p[0][0]所以sizeof((*p3[0])[0]) = sizeof(short) =2;注意:p3[0][0]也是乙個指標,指向陣列的第乙個元素。sizeof(p3[0][0]) = 6;
關於指標陣列和陣列指標
陣列指標 舉例說明 int p 5 陣列指標的英文是 a pointer to an array 也就是指向陣列的指標。通過int p 5 p 是宣告,宣告p是乙個指標,它指向的內容是int 5 這個陣列。簡單運用下 int a 5 int p 5 a 這裡的意思也就是a是個五位的陣列,而p指向陣列...
關於指標和陣列
1.指標陣列 形如int arr 10 的型別,指標陣列可以簡單理解為存放指標變數的陣列。2.陣列指標 形如int arr 10 的型別,陣列指標可以簡單理解為指向陣列的指標。就上面所介紹的兩種型別來看,有一種較為簡單的記憶方法,看 和誰先和arr接觸,若是先和 接觸,即為陣列指標,若是先和接觸,即...
關於指標和陣列
指標陣列,從名字就可以看出,指標陣列本質上陣列,組內元素由指標構成。下面列出幾種常見的指標陣列型別用來加深大家對指標陣列的理解 int a 10 char b 10 char c 10 陣列指標是指標,表示乙個指向陣列的指標,在32位系統下佔4個位元組。下面列出的就是陣列指標。int p 10 in...