Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 初始化可变长度数组_C_Variable Length Array_Array Initialization - Fatal编程技术网

C 初始化可变长度数组

C 初始化可变长度数组,c,variable-length-array,array-initialization,C,Variable Length Array,Array Initialization,初始化可变长度数组时,编译器会发出错误消息: [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]

初始化可变长度数组时,编译器会发出错误消息:

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

您必须使用
memset

memset(board, 0, sizeof board);
VLA不能通过任何形式的初始化语法进行初始化。在声明之后,必须以您喜欢的方式将初始值分配给数组元素

C11:6.7.9初始化(p2和p3): 初始化者不得试图为未包含在被初始化实体中的对象提供值

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


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;
   }
}
intn;
printf(“输入幻方的大小:”);
scanf(“%d”和“&n”);
国际板[n][n];

对于(inti=0;我不知道
memset()
。这是什么意思?@haccks您只需将它放在您的行
intboard[n][n];
。并确保您
#包含
#包含
C。您想将其初始化为
0
,对吗?您的意思是说
intboard[n][n];
。对吗?@haccks:不。数组是不可赋值的。这就是为什么我说“将初始值赋给数组元素”。除非像
memset
memcpy
这样的原始内存操作,它必须以元素对元素的方式进行。所以,我的意思是说
for(I=0;I
等等。我读到数组可以初始化为
数组[m][n]={0}
,这将把它的第一个元素初始化为
0
,其余的元素初始化为
0
本身。@haccks:“initialized”表示
={0}
可以在声明中指定为初始值设定项。您在第一条注释中的内容完全不正确。即使在声明中,它也仅适用于非VLA数组。例如,您可以执行
int array[10][10]={0}
。然而,这个问题是专门针对VLA数组的。VLA数组不接受初始值设定项。当
m
n
不是常量时,你不能执行
int-array[m][n]={0}
。“…memset()应该只在你想将数组设置为“0”时才使用。为什么?@alk:the
memset()
函数用常量字节c填充s指向的内存区域的前n个字节。然而,整数的大小通常为4个字节,因此我们无法将整数设置为所需的数字,但“0”是一个特例,因为对于“0”,
memset()
将所有字节设置为“0”。@paragangil;memset()仅当要将数组设置为“0”时才应使用:。