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

rpo*_*lai 2 c++ initialization definition multidimensional-array

我在使用以下定义进行编译时遇到错误.

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

char str[ ][ ] = { "abc", "fgh" };
Run Code Online (Sandbox Code Playgroud)

为什么编译器抱怨缺少下标和太多的初始化器.

Kri*_*ket 8

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

编辑:在这里阅读我的帖子


Aru*_*run 5

如果数组定义为,int arr[ ROWS ][ COLS ];那么任何数组表示法arr[ i ][ j ]都可以转换为指针表示法

*( arr + i * COLS + j )
Run Code Online (Sandbox Code Playgroud)

观察表达式只需要COLS,它不需要ROWS.因此,数组定义可以等效地编写为

int arr [][ COLS ];
Run Code Online (Sandbox Code Playgroud)

但是,错过第二个维度是不可接受的.

通过以下给出的三个实例可以实现进一步的理解.在所有三个示例中,相同的数组表示法arr[ 2 ][ 3 ]转换为指针表示法.

  • 在A和B之间,ROWS是相同的,但COLS是不同的; result =指针表示法不同.

  • 在A和C之间,ROWS是不同的,但COLS是相同的; result =指针表示法是相同的.

例子:

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
Run Code Online (Sandbox Code Playgroud)