編譯時出現以下定義錯誤。定義和初始化多維數組時出錯
int matrix[ ][ ] = { { 1, 2, 3}, {4,5,6} };
char str[ ][ ] = { "abc", "fgh" };
爲什麼編譯器抱怨缺少下標和太多的初始值設定項。
編譯時出現以下定義錯誤。定義和初始化多維數組時出錯
int matrix[ ][ ] = { { 1, 2, 3}, {4,5,6} };
char str[ ][ ] = { "abc", "fgh" };
爲什麼編譯器抱怨缺少下標和太多的初始值設定項。
當您聲明多維數組時,您必須明確定義除最後一個維以外的所有維的大小。否則,編譯器將不知道如何在數組中找到給定值。
編輯:閱讀我的文章here
嘗試
include <string>
和
string str[] = { "abc", "fgh" };
這可能需要'''在''abc,'和';'末尾。 – Arun 2010-10-11 17:32:57
int matrix[2][3] = { { 1, 2, 3}, {4,5,6} };
char str[2][4] = { "abc", "fgh" };
第一個聲明將2D int數組有2行3個關口。
第二將使2行和4列的char數組。 炭陣列中的每一行中的第四元素是NULL
炭
如果陣列被定義爲int arr[ ROWS ][ COLS ];
那麼任何數組符號arr[ i ][ j ]
可以轉換爲指針符號作爲
*(arr + i * COLS + j)
可觀察到表達只需要COLS,它不需要ROWS。所以,陣列 定義可以被等效地寫成
int arr [][ COLS ];
但是,缺少第二個方面是不能接受的。
通過遵循下面給出的三個示例可以進一步理解。在所有三個例子中,相同的數組符號arr[ 2 ][ 3 ]
被轉換爲指針 表示法。
在A和B之間,ROWS是相同的,但COLS是不同的;結果=指針記號 是不同的。
在A和C之間,ROWS不同但COLS相同;結果=指針表示法是相同的。
例子:
A. int arr[ 4 ][ 7 ]; arr[2][3] = arr + 2 * 7 + 3 = arr + 17
B. int arr[ 4 ][ 5 ]; arr[2][3] = arr + 2 * 5 + 3 = arr + 13
C. int arr[ 6 ][ 7 ]; arr[2][3] = arr + 2 * 7 + 3 = arr + 17
任何想法,爲什麼不能編譯通過分配計數之前從初始化列表中元素的個數計算大小。 – rpoplai 2010-10-11 14:03:21
我在我鏈接到的其他帖子中解釋它。 – Kricket 2010-10-11 14:22:55