将可变大小的多维C数组初始化为零

时间:2010-09-15 14:41:08

标签: c arrays initialization

我想将可变大小的二维数组初始化为零。 我知道它可以用于固定大小的数组:

int myarray[10][10] = {0};

但是如果我这样做就行不通了:

int i = 10;
int j = 10;
int myarray[i][j] = {0};

是否有单行方式执行此操作或是否必须遍历数组的每个成员?

由于

5 个答案:

答案 0 :(得分:9)

您无法使用初始值设定项对其进行初始化,但您可以将数组memset()设置为0。

#include <string.h>

int main(void) {
  int a = 13, b = 42;
  int m[a][b];
  memset(m, 0, sizeof m);
  return 0;
}

注意:这是C99C89中声明m(int m[a][b];)是错误的。

答案 1 :(得分:3)

Online C99 Standard (n1256 draft),第6.7.8节,第3段:

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

强调我的。

正如其他人所说,最好的办法是使用memset()

答案 2 :(得分:1)

如果您获得指向数据结构的指针,则可以尝试memset

答案 3 :(得分:0)

您无法使用非常量变量创建静态数组。 尝试使用动态分配:

int i = 10;
int j = 10;
size_t nbytes = i*j*sizeof(int);
int* myarray = (int*) malloc(nbytes);
memset(myarray,0,nbytes);

答案 4 :(得分:-1)

C中不支持可变大小的二维数组。必须修复一个维度(我不记得它是第一个还是第二个)。我建议一旦定义就循环遍历它。