定义和初始化多维数组时出错

问题描述:

编译时出现以下定义错误。定义和初始化多维数组时出错

int matrix[ ][ ] = { { 1, 2, 3}, {4,5,6} }; 

char str[ ][ ] = { "abc", "fgh" }; 

为什么编译器抱怨缺少下标和太多的初始值设定项。

当您声明多维数组时,您必须明确定义除最后一个维以外的所有维的大小。否则,编译器将不知道如何在数组中找到给定值。

编辑:阅读我的文章here

+0

任何想法,为什么不能编译通过分配计数之前从初始化列表中元素的个数计算大小。 – rpoplai 2010-10-11 14:03:21

+0

我在我链接到的其他帖子中解释它。 – Kricket 2010-10-11 14:22:55

尝试

include <string> 

string str[] = { "abc", "fgh" }; 
+1

这可能需要'''在''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