无法初始化2D阵列
问题描述:
我已经声明了一个2D全局数组变量,像这样:无法初始化2D阵列
int grid_2d_array[ROWS][COLUMNS];
然后在main
我已经与硬编码值来初始化:
grid_2d_array[ROWS][COLUMNS] = {{5, 7, 2, 8, 3, 6, 1, 4},
....
{1, 6, 3, 2, 4, 8, 9, 5}
};
实施例:
#include <stdio.h>
#define ROWS 9
#define COLUMNS 9
/* Global variable. */
int grid_2d_array[ROWS][COLUMNS];
int main()
{
/* Initialze the 2D array. */
grid_2d_array[ROWS][COLUMNS] = {{5, 7, 2, 8, 3, 6, 1, 4},
....
{1, 6, 3, 2, 4, 8, 9, 5}
};
return 0;
}
但是当我尝试编译源代码,GCC提供了以下错误:
source_file.c: In function ‘main’:
source_file.c:45:34: error: expected expression before ‘{’ token
grid_2d_array[ROWS][COLUMNS] = {{5, 7, 2, 8, 3, 6, 1, 4},
^
我不确定为什么海湾合作委员会不承认grid_2d_array
作为一个全局变量。
如果我在main
中重新声明上述变量,问题就消失了。
我运行GCC版本:gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04)
答
C和C++阵列只能作为定义语句的一部分被初始化:不支持
int grid_2d_array[ROWS][COLUMNS] = {{5, 7, 2, 8, 3, 6, 1, 4},
....
{1, 6, 3, 2, 4, 8, 9, 5}
};
分配多个值中的成阵列。在主
int (*grid_2d_array)[COLUMNS]; /* Pointer to array of n int's */
:
答
除了FireAphis的答案,如果你是C99下,你可以使用compound literals初始化一个指向int
秒(而不是二维数组)他的定义之外阵列
grid_2d_array = (int [ROWS][COLUMNS]){
{5, 7, 2, 8, 3, 6, 1, 4},
{1, 6, 3, 2, 4, 8, 9, 5}
};
请提供其他人可以尝试编译的适当的最小示例。现在还不清楚定义在哪里以及是否有其他影响问题。 –
您需要为您的数组及其嵌套数组分配内存。 – vdolez
'grid_2d_array [ROWS] [COLUMNS] ='指定数组的一个元素(不存在)。尝试删除'[行数] [柱]'和'只是使用grid_2d_array = {/ *你的东西放在这里* /};'。 –