无法初始化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)

+0

请提供其他人可以尝试编译的适当的最小示例。现在还不清楚定义在哪里以及是否有其他影响问题。 –

+0

您需要为您的数组及其嵌套数组分配内存。 – vdolez

+1

'grid_2d_array [ROWS] [COLUMNS] ='指定数组的一个元素(不存在)。尝试删除'[行数] [柱]'和'只是使用grid_2d_array = {/ *你的东西放在这里* /};'。 –

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} 
};