代码之家  ›  专栏  ›  技术社区  ›  Ben2209

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

  •  11
  • Ben2209  · 技术社区  · 15 年前

    我想将一个大小可变的二维数组初始化为零。 我知道对于固定大小的阵列可以这样做:

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

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

    有没有一种单行的方法,或者我必须在数组的每个成员上循环?

    5 回复  |  直到 15 年前
        1
  •  9
  •   pmg    13 年前

    不能用初始值设定项初始化,但可以 memset()

    #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]; )是个错误。

        2
  •  3
  •   John Bode    15 年前

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

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

        3
  •  1
  •   kbrimington    15 年前

    如果有指向数据结构的指针,可以尝试 memset .

        4
  •  0
  •   Volodymyr K.    15 年前

    不能使用非常量变量创建静态数组。 尝试使用动态分配:

    int i = 10;
    int j = 10;
    size_t nbytes = i*j*sizeof(int);
    int* myarray = (int*) malloc(nbytes);
    memset(myarray,0,nbytes);
    
        5
  •  -1
  •   erelender    15 年前