如何根据输入数量定义数组大小?

时间:2016-01-21 15:47:38

标签: c arrays variable-length-array

据我所知,(我是c中的初学者)你可以定义数组的大小,前提是用户知道用户将提供多少输入。但是,如何根据输入数量定义数组的大小?

例如,如果我必须提供10个数字作为输入,那么我如何以这样的方式声明一个数组,根据我的输入计数将其大小指定为10? (我不知道是否有可能,但我想知道)

3 个答案:

答案 0 :(得分:6)

从C99开始,您可以使用可变长度数组。您可以随时使用size_t变量声明它们。

size_t n;
printf("How many numbers would you like to enter?\n");
scanf("%zu", &n);
int array[n];
for (size_t i = 0 ; i != n ; i++) {
    printf("Enter number %zu: ", i+1);
    scanf("%d", &array[i]);
}
printf("You entered: ");
for (size_t i = 0 ; i != n ; i++) {
    printf("%d ", array[i]);
}
printf("\n");

Demo.

注意:此方法适用于相对较小的数组。如果您预计使用较大的阵列,请不要使用此方法,因为它可能导致未定义的行为(溢出自动存储​​区域)。相反,请使用mallocfree

答案 1 :(得分:1)

我认为你应该在C中讨论指针概念。 you can go through these videos

为1d数组分配内存动态指针非常方便。

答案 2 :(得分:1)

您当然可以使用variable-length arrays(在C99中引入),但请注意,在最新标准C11中,这已成为可选功能。最新的编译器不会绑定以支持此功能。如果您有兴趣,请查看this answer

最好的方法是使用指针和动态内存分配函数,如malloc()和family。

示例:(伪代码)

int * p = NULL;
int input = -1;
scanf("%d", &input);
p = malloc(input * sizeof*p);
if (p) { .....

在这里,您可以使用input变量值来控制分配大小。

P.S-指针不是阵列,当然,但我相信,对于大多数情况,这将达到目的。