【发布时间】:2011-04-23 20:02:51
【问题描述】:
我在使用以下定义进行编译时出错。
int matrix[ ][ ] = { { 1, 2, 3}, {4,5,6} };
char str[ ][ ] = { "abc", "fgh" };
为什么编译器抱怨缺少下标和太多初始化器。
【问题讨论】:
标签: c++ initialization multidimensional-array definition
我在使用以下定义进行编译时出错。
int matrix[ ][ ] = { { 1, 2, 3}, {4,5,6} };
char str[ ][ ] = { "abc", "fgh" };
为什么编译器抱怨缺少下标和太多初始化器。
【问题讨论】:
标签: c++ initialization multidimensional-array definition
试试
include <string>
和
string str[] = { "abc", "fgh" };
【讨论】:
"abc, 之后加上" 并在最后加上;。
如果一个数组被定义为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
【讨论】:
int matrix[2][3] = { { 1, 2, 3}, {4,5,6} };
char str[2][4] = { "abc", "fgh" };
第一个声明将使 2d int 数组有 2 行和 3 列。
第二个将制作具有 2 行和 4 列的 2d char 数组。
char 数组中每一行的第 4 个元素是 NULL char
【讨论】:
当你声明一个多维数组时,你必须明确定义除最后一个维度之外的所有维度的大小。否则,编译器将不知道如何在数组中查找给定值。
编辑:阅读我的帖子here
【讨论】: