我知道我们可以通过写入来初始化具有0的二维数组
a[value_1][value_2] = {0};
如果我们写
a[value_1][value_2] = {number other than 0};
第一个元素由{}中给定的数字初始化,其余全部由0初始化。
但是,困扰我的是,我们如何初始化一个参数value_1和value_2已从用户输入的数组,因为它显示了可变大小对象可能无法初始化的错误。
此外,如果您也能告诉多维数组(而不仅仅是二维数组)同样的内容,这将是有帮助的。
要在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++中,都不支持可变大小对象中的初始值设定项。
不能使用用户输入的值初始化数组。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];