作者DJWS (...)
看板C_and_CPP
標題Re: [問題] array / pointer to array
時間Mon May 10 16:19:10 2010
整理一下剛剛討論的結果。
int a[3][2];
a 的型別是 int[3][2]
a[0] 的型別是 int[2]
a[0][0] 的型別是 int
在程式碼當中寫 a
編譯器通常會幫你自動轉換成 &(a[0]) 這樣的東西
意義上是「指向陣列第零格的指標」
a[0] 的型別是 int[2]
&(a[0]) 的型別是 pointer to int[2],也就是(int*)[2]
只有三個情況,a會保持原狀(
http://c-faq.com/aryptr/aryptrequiv.html)
1. &a 型別為 pointer to int[3][2],也就是 (int*)[3][2]
2. sizeof(a) 算得結果是 3x2x4,而非 2x4
3. char s[] = "xxxx";
-
&(a[0]) 與 &a 都是指向陣列第零格的指標,
只是型別不同而已。
int (*p)[2] = &(a[0]); // int (*p)[2] = a;
int (*q)[3][2] = &a;
p + 1; // 飛過 2x4 byte
q + 1; // 飛過 3x2x4 byte
-
自動轉換的示範:
int a[3][2] = {{0,1},{2,3},{4,5}};
int (*b)[2] = a; // int (*b)[2] = &(a[0]);
cout << a[0][0];
cout << b[0][0];
如此一來b的功能就跟a差不多。
-
如果是用 &a 的話:
int a[3][2] = {{0,1},{2,3},{4,5}};
int (pa*)[3][2] = &a;
cout << a[0][0];
cout << (*pa)[0][0];
cout << pa[0][0][0]; // (*(pa+0))[0][0]
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.154.196
※ 編輯: DJWS 來自: 59.115.154.196 (05/10 16:21)
→ kingofsdtw:A[0]={0,1,2} A[1]={3,4,5} and *(A+i)=sizeof(int)*3 05/10 16:31
→ kingofsdtw:我這樣講對嗎Q_Q? 05/10 16:31
※ 編輯: DJWS 來自: 59.115.154.196 (05/10 16:34)
→ DJWS:不對 05/10 16:35