初始化可变长度数组
在初始化变长数组时,编译器给出一个错误信息:
[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不能通过任何forms的初始化语法进行初始化。 无论您喜欢什么方式,您都必须在声明后将初始值分配给您的数组元素。
C11:6.7.9初始化(p2和p3):
初始化程序不应尝试为未初始化的实体内的对象提供值。
要初始化的实体的types应该是未知大小的数组或不是可变长度数组types的完整对象types 。
你将不得不使用memset
:
memset(board, 0, sizeof board);
如果你想使用VLA,你必须删除初始化{0}
int n; printf("Enter size of magic square: "); scanf("%d",&n); int board[n][n];
你可以简单地初始化数组,如下所示 –
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.只有当你想将数组设置为“0”时才应该使用memset() 。