Re: [問題] array / pointer to array
整理一下剛剛討論的結果。
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)
→
05/10 16:31, , 1F
05/10 16:31, 1F
→
05/10 16:31, , 2F
05/10 16:31, 2F
※ 編輯: DJWS 來自: 59.115.154.196 (05/10 16:34)
→
05/10 16:35, , 3F
05/10 16:35, 3F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章