【问题标题】:Initialising an m x n 2D-Array to 0 [duplicate]将m x n 2D-Array初始化为0 [重复]
【发布时间】:2021-01-03 03:09:02
【问题描述】:

我正在尝试将大小为 m x n 的 C 中的二维数组初始化为 0,这是我的函数中的输入。这是一个示例(对输出不感兴趣,因此为 void 类型):

void createArray(int m, int n)
{
    int array[m][n]={0};
}

我收到错误:“可变大小的对象可能未初始化”。当我也使用“const int”而不是“int”时,我没有运气。

如果我不尝试将 0 分配给数组,这可以正常工作:

void createArray(int m, int n)
{
    int array[m][n];
}

有没有办法解决这个问题?必须循环遍历将所有值设置为 0 的数组似乎效率低下,但也许这就是 C 初始化它的方式?

【问题讨论】:

标签: arrays c matrix initialization parameter-passing


【解决方案1】:

必须循环设置所有值的数组似乎效率低下 到 0

不会影响性能。初始化循环转换为对 memset 零的调用(用于 gcc -O3 编译器标志)

memset(array, 0, sizeof(array));

参考 - https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

【讨论】:

  • 我没有得到这个的第一行。和“你可以试试”一样吗?另外,请更加自信,即请远离“尝试”答案。
  • 循环可能比memset 效率更高、更低或相同。 memset 可能必须采取预防措施以防错位,而普通的 for 循环不需要这样做。
猜你喜欢
  • 2021-09-27
  • 2023-03-20
  • 2019-02-27
  • 2022-11-14
  • 1970-01-01
  • 2011-03-19
  • 2013-12-21
  • 2017-05-06
  • 1970-01-01
相关资源
最近更新 更多