据我所知,(我是c中的初学者)你可以定义数组的大小,前提是用户知道用户将提供多少输入。但是,如何根据输入数量定义数组的大小?
例如,如果我必须提供10个数字作为输入,那么我如何以这样的方式声明一个数组,根据我的输入计数将其大小指定为10? (我不知道是否有可能,但我想知道)
答案 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");
注意:此方法适用于相对较小的数组。如果您预计使用较大的阵列,请不要使用此方法,因为它可能导致未定义的行为(溢出自动存储区域)。相反,请使用malloc
和free
。
答案 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-指针不是阵列,当然,但我相信,对于大多数情况,这将达到目的。