看板 C_and_CPP 關於我們 聯絡資訊
整理一下剛剛討論的結果。 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