可変長配列コンパイラを初期化すると、エラーメッセージが表示されます。
[Error] variable-sized object may not be initialized
コードスニペット:
int n;
printf("Enter size of magic square: ");
scanf("%d",&n);
int board[n][n] = {0};
可変長配列を初期化する方法そして、以下のように、すべての要素が0
に初期化されない理由;
int board[n][n];
board[n][n] = {0};
?
VLAは、初期化構文の形式によってinitializedにすることはできません。宣言後、配列要素に初期値をどの方法でもassignする必要があります。
初期化子は、初期化されているエンティティ内に含まれていないオブジェクトの値を提供しようとしません。
初期化されるエンティティのタイプは、サイズが不明な配列または完全なオブジェクトタイプ可変長配列タイプではないでなければなりません。
memset
を使用する必要があります。
memset(board, 0, sizeof board);
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()は、配列を「0」に設定する場合にのみ使用してください。