2015-06-06 2 views
1

Я имею эту структуру:как инициализировать статический массив в пределах структуры

typedef struct { 
    int start; 
    int end; 
    char board[10][10]; 
} move; 

когда я пытаюсь инициализировать его таким образом:

char new_board[10][10] 
move struct new_move = {0, 0, new_board} 

я получаю эту ошибку:

предупреждение C4047: ' инициализация ':' char 'отличается по уровням косвенности от' char (*) [10] '

любые предложения?

ответ

1

Если вы хотите инициализировать массив нулей, то вы можете написать просто

move new_move = { 0 }; 

Если вы хотите, чтобы структура массив будет содержать значение массива char new_board[10][10], то вы должны скопировать его элемент в массиве структуры.

, например

char new_board[10][10] = { /* some initializers */ }; 

move new_move = { 0 }; 

memcpy(new_move.board, new_board, sizeof(new_board)); 

If board является массивом строк, то вы можете также скопировать с помощью цикла каждой строки в массиве структуры, используя стандартную функцию C strcpy.

0

Во-первых - причина, по которой вы не можете этого сделать: если вы сделаете что-то подобное, вы говорите компилятору, что вы пытаетесь переписать постоянный указатель (таблица является указателем константы).

Вы можете инициализировать массив, используя два четыре петли так:

int i, j 
for (i = 0; i < 10; i++) 
    for (j = 0; j < 10; j++) 
     new_move.board[i][j] = new_board[i][j]; 

Это должно работать лучше всего, на мой взгляд.

Смежные вопросы