[英]Excess elements in array initializer initializing 2D array using variable
我正在嘗試將數組 N[][] 的所有值初始化為 0,但我在數組初始值設定項中得到了多余的元素
int M = 5;
int N[5][M] = {0}
您需要手動初始化 VLA 陣列。
如果你想歸零它使用 memset 就像我的例子一樣。 如果你想要更復雜的東西,你需要編寫自己的代碼來做到這一點。
int init(void *array, size_t size, int *initializer, size_t isize)
{
unsigned char *wrk = array;
if(initializer)
{
memcpy(wrk, initializer, isize);
}
else
{
isize = 0;
}
memset(wrk + isize, 0, size - isize);
return array;
}
int main()
{
int M = 5;
int Z = 5;
int N[Z][M];
memset((void *)N, 0, sizeof(N));
for (int i = 0; i < Z; i++)
{
for (int j = 0; j < M; j++)
printf("%d ", N[i][j]);
printf("\n");
}
printf("\n");
init(N, sizeof(N), (int[]){1,2,3,4}, sizeof(int) * 4);
for (int i = 0; i < Z; i++)
{
for (int j = 0; j < M; j++)
printf("%d ", N[i][j]);
printf("\n");
}
}
啟用-pedantic
標志,您將收到編譯器警告:
main.c: In function 'main':
main.c:5:3: error: variable-sized object may not be initialized
5 | int N[5][M] = {0};
| ^~~
您不能初始化可變長度數組。 但是你可以在 C98 中定義它的大小。
一種可能的解決方案是在#define
預處理器中定義M
:
#define M 5
您將不會再收到數組初始值設定項中元素過多的警告,示例代碼:
#include <stdio.h>
#define M 5 // Here we go
int main(void) {
int N[5][M] = {0};
for (int i = 0; i < M; i++)
for (int j = 0; j < M; j++)
printf("%d ", N[i][j]);
printf("\n");
return 0;
}
在此代碼之后,二維數組將不再是 VLA。
它會顯示:
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.