Инициализация массива переменной длины
При инициализации компилятора массива переменной длины появляется сообщение об ошибке:
[Error] variable-sized object may not be initialized
Фрагмент кода:
int n;
printf("Enter size of magic square: ");
scanf("%d",&n);
int board[n][n] = {0};
Как следует инициализировать Variable Length arrays?
И почему все элементы не инициализируются 0
следующим образом:
int board[n][n];
board[n][n] = {0};
?
Ответы
Ответ 1
VLAs не может быть инициализирован с помощью любой формы синтаксиса инициализации. Вы должны назначить начальные значения вашим элементам массива после объявления в зависимости от того, какой вы предпочитаете.
C11: 6.7.9 Инициализация (p2 и p3):
Ни один инициализатор не должен пытаться предоставить значение для объекта, не содержащегося в инициализированном объекте.
Тип инициализируемого объекта должен быть массивом неизвестного размера или полным типом объекта , который не является массивом переменной длины.
Ответ 2
Вам нужно будет использовать memset
:
memset(board, 0, sizeof board);
Ответ 3
Если вы хотите использовать VLA, вам нужно удалить инициализацию {0}
int n;
printf("Enter size of magic square: ");
scanf("%d",&n);
int board[n][n];
Ответ 4
1. Вы можете просто инициализировать массив следующим образом:
int n;
printf("Enter size of magic square: ");
scanf("%d",&n);
int board[n][n];
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
board[i][j] = 0;
}
}
2. memset() следует использовать d только тогда, когда вы хотите установить массив в "0".