初始化具有特定值的可变2-D数组

时间:2013-08-28 08:02:42

标签: c++ c arrays multidimensional-array array-initialization

我知道我们可以通过编写

来初始化一个带有0的二维数组
a[value_1][value_2] = {0};

如果我们写

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

第一个元素由{}中给出的数字初始化,并且全部按0。

但是,让我烦恼的是,我们如何初始化一个数组,其参数value_1和value_2已被用户输入,因为它显示了可能无法初始化变量大小的对象的错误。

另外,如果您也可以对多维数组(而不仅仅是2维数组)说出相同的信息,那将会很有帮助。

2 个答案:

答案 0 :(得分: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;
}

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

据我所知,不支持C或C ++中可变大小对象的初始值设定项。

答案 1 :(得分:-1)

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

请参阅Dennis Ritchie

使用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];

相关问题