2015-10-06 104 views
0

我已經聲明瞭一個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 = {/ *你的東西放在這裏* /};'。 –

回答

5

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 */ 

2

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