【问题标题】:How to initialise 2d array with all elements are 0?如何初始化所有元素为0的二维数组?
【发布时间】:2014-04-09 13:58:00
【问题描述】:

我想初始化一个所有元素都为 0 的二维数组。 我试过这个:

scanf("%d",&n);
int arr[n][n]={0};

但我得到了[错误]:“可变大小的对象可能未初始化”

那么,该怎么做呢?

【问题讨论】:

  • 当我使用静态 int arr[n][n] 时,我得到了这个:[错误] 'a' 的存储大小不是恒定的
  • 我有一个建议:不要使用 VLA,而是使用动态分配:int *arr = calloc(n * n, sizeof *arr);
  • 我用 calloc 它说:[错误]:“函数 'calloc' 的两个参数”
  • 我的错误,已编辑 ... 之后您需要验证 arr 并通过 n * row + col 计算对数组的每次访问
  • @pmg 太容易使用 calloc。如果有一个简单的解决方案并且有一个不必要的复杂解决方案,请始终使用不必要的复杂解决方案:)

标签: c


【解决方案1】:

要明确。

#include <string.h>

const int got = scanf("%d", &n);
int arr[n][n];
memset(arr, 0, sizeof arr);

请注意,如果got 不是 1,则上面的行为未定义。这很危险。

【讨论】:

  • 它给了我:[警告]内置函数'memset'的不兼容隐式声明[默认启用]
  • @madhurgarg 你需要#include &lt;string.h&gt;,这被认为是众所周知的。我加了。
  • 对不起!因为我的错误。
【解决方案2】:

分两步进行:

int a[n][n];
for(int i=0;i<n;i++)
{
   for(int j=0;j<n;j++)
   {
      a[i][j] = 0;
   }
}

【讨论】:

    【解决方案3】:

    可能是最简单的方法

    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
        {
            a[i][j] = 0;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 2015-03-08
      • 2011-12-08
      • 2016-12-09
      相关资源
      最近更新 更多