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