我想将可变大小的二维数组初始化为零。 我知道它可以用于固定大小的数组:
int myarray[10][10] = {0};
但如果我这样做,它就无法运作:
int i = 10;
int j = 10;
int myarray[i][j] = {0};
是否有单行方式执行此操作或是否必须遍历数组的每个成员?
谢谢
我想将可变大小的二维数组初始化为零。 我知道它可以用于固定大小的数组:
int myarray[10][10] = {0};
但如果我这样做,它就无法运作:
int i = 10;
int j = 10;
int myarray[i][j] = {0};
是否有单行方式执行此操作或是否必须遍历数组的每个成员?
谢谢
您无法使用初始化程序对其进行初始化,但您可以 memset()
数组为0。
#include <string.h>
int main(void) {
int a = 13, b = 42;
int m[a][b];
memset(m, 0, sizeof m);
return 0;
}
注意:这是 C99
。 在 C89
m的声明( int m[a][b];
)是一个错误。
您无法使用初始化程序对其进行初始化,但您可以 memset()
数组为0。
#include <string.h>
int main(void) {
int a = 13, b = 42;
int m[a][b];
memset(m, 0, sizeof m);
return 0;
}
注意:这是 C99
。 在 C89
m的声明( int m[a][b];
)是一个错误。
在线C99标准(n1256草案),第6.7.8节,第3段:
要初始化的实体的类型应该是未知大小的数组或 不是可变长度数组类型的对象类型。
强调我的。
正如其他人所说,你最好的选择是使用 memset()
。
如果你得到一个指向数据结构的指针,你可以试试 memset的。
您不能使用非常量变量创建静态数组。 尝试使用动态分配:
int i = 10;
int j = 10;
size_t nbytes = i*j*sizeof(int);
int* myarray = (int*) malloc(nbytes);
memset(myarray,0,nbytes);
C中不支持可变大小的二维数组。必须修复一个维度(我不记得它是第一个还是第二个)。我建议一旦定义就循环遍历它。