精華區beta CompBook 關於我們 聯絡資訊
C++ Primer 答客問 (3) 侯捷 jjhou@ccca.nctu.edu.tw 1999.10.12 第一次發表於 清大.楓橋驛站(140.114.87.5).電腦書訊版(Computer/CompBook) 本文將於日後整理於 侯捷網站/侯捷譯作/C++ Primer 中文版/答客問 侯捷網站:www.jjhou.com ---------------------------------------------------------------- Allan wrote (1999/10/10): > 侯 sir 您好: > > 我現在正在研讀您譯的 C++ Primer。對於書中 118 頁 3.9.1 節 > 最後一段的敘述有點疑問。書上說 ia 是一個二維陣列,而 ia[1,2] > 即為 ia[2]。我的疑問是: > > (1) ia 明明是二維陣列,寫 ia[2] 合法嗎? > > (2) 書上說 ia[2] 所存取到的是 ia 的第三個 row 的第一個元素。 > 這意思是指 ia[2][0] 嗎?難道說: > > int ia[4][3] = { ... }; // (a) > ia[1,2] = 5; // (b) > > 第二行的意思是 ia[2][0]=5 嗎? 侯捷回答: (1) ia[2] 是合法的,表示 &(ia[2][0])。就好像面對 一維陣列 int ia[10]; 我們可以 ia 代表 &(ia[0]) 一樣。 (2) 書上的文字有點容易引起誤會。我們不能只給定一維索引, 就想選定二維陣列的某個元素。你所舉的 (b) 式會出現編譯錯誤。 書上的意思其實就是上述 (1) 的意思。 寫個小程式瞧瞧: #include <iostream.h> void main() { int ia[2][3] = { { 0, 1, 2}, {3, 4, 5} }; // 可視為兩個次陣列的組合 cout << ia[1][2] << endl; // 5 cout << ia << endl; // 0x0063FDE0 cout << &(ia[0][0]) << endl; // 0x0063FDE0 cout << &(ia[1][2]) << endl; // 0x0063FDF4 cout << ia[1, 2] << endl; // 0x0063FDF8, 等於 ia[2] cout << ia[2] << endl; // 0x0063FDF8, 等於 &(ia[2][0]) // 表示第二個「次陣列」的起始點 cout << &(ia[2][0]) << endl; // 0x0063FDF8, ia[2][0] 緊接在 ia[1][2] 之後 ia[2] = 9; // error } --- the end  -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ Mail: jjhou@ccca.nctu.edu.tw