2015-10-06 5 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}, 
           ^

Я не уверен, почему GCC не признает 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] =' задает элемент (который не существует) массива. Попробуйте удалить '[ROWS] [COLUMNS]' и просто 'use 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} 
            }; 

Присвоение нескольких значений в массиве не поддерживается.

2

В дополнение к ответу FireAphis, в если вы под C99 вы можете инициализировать указатель на массив int с (не 2D массива) за пределами его определения с помощью compound literals:

int (*grid_2d_array)[COLUMNS]; /* Pointer to array of n int's */ 

в основной:

grid_2d_array = (int [ROWS][COLUMNS]){ 
    {5, 7, 2, 8, 3, 6, 1, 4}, 
    {1, 6, 3, 2, 4, 8, 9, 5} 
}; 
Смежные вопросы