为了账号安全,请及时绑定邮箱和手机立即绑定

初始化可变长度数组

/ 猿问

初始化可变长度数组

C
沧海一幻觉 2019-11-19 15:18:08

初始化可变长度数组编译器时,将显示错误消息:


[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};


查看完整描述

3 回答

?
蛊毒传说

无法通过任何形式的初始化语法来初始化 VLA 。在声明之后,您必须以自己喜欢的任何方式将初始值分配给数组元素。


C11:6.7.9初始化(p2和p3):

初始化程序不得尝试为未包含在正在初始化的实体中的对象提供值。


要初始化的实体的类型应为未知大小的数组或不是可变长度数组类型的完整对象类型。


查看完整回答
反对 回复 2019-11-19
?
犯罪嫌疑人X

您必须使用memset:


memset(board, 0, sizeof board);


查看完整回答
反对 回复 2019-11-19
?
45度呼吸

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. 仅当要将数组设置为“ 0”时,才应使用memset()。


查看完整回答
反对 回复 2019-11-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信