0

我知道我们可以通过编写用 0 初始化一个二维数组

a[value_1][value_2] = {0};

如果我们写

a[value_1][value_2] = {number other than 0};

第一个元素由 { } 中给定的数字初始化,其余全部为 0。

但是,困扰我的是,我们如何初始化一个数组,其参数 value_1 和 value_2 已从用户那里获取输入,因为它显示了可变大小对象可能未初始化的错误。

此外,如果您也可以对多维数组(而不仅仅是二维数组)进行同样的说明,这将很有帮助。

4

2 回答 2

0

要在 C99 中执行此操作(使用 编译gcc -std=c99):

#include <stdio.h>
#include <string.h>

int main ()
{
  int value_1, value_2;
  scanf("%d %d", &value_1, &value_2);

  int a[value_1][value_2];

  // initialize
  for (int i=0; i<value_1; i++)
    for (int j=0; j<value_1; j++)
      a[i][j] = 0;
  // or
  memset(a, 0, value_1*value_2*sizeof(int));

  return 0;
}

正如@JensGustedt 所指出的,在 C++ 中,不支持可变长度数组。另一方面,g++支持它,所以上面的相同代码也可以在那里工作。

据我所知,在 C 或 C++ 中不支持可变大小对象中的初始化程序。

于 2013-08-28T11:05:50.963 回答
-1

您不能使用用户输入的值来初始化数组。C 不允许这样做。

请参阅丹尼斯·里奇

malloc()使用该函数可以实现相同目的的一种方法。

#include<stdio.h>
#include<malloc.h>

int main(void)
{
    int limit;
    printf("Enter the array limit:- ");
    scanf("%d",&limit);
    int *arr = (int*)malloc(sizeof(int) * limit);

    // The above statement allocates the memory equivalent to 3 integers

    // Now considering your limit is 3 and initializing values

    arr[0] = 43;
    arr[1] = 65;
    scanf("%d",&arr[2]);    // All of these work perfectly fine.

    return 0;
}

我希望这有帮助。同样,您也可以创建多维数组。没有明确的方法来定义标准 C 中的限制。你不能这样做int arr[limit];

于 2013-08-28T12:38:32.897 回答