如何根据输入数量定义数组大小?
Posted
技术标签:
【中文标题】如何根据输入数量定义数组大小?【英文标题】:How to define array size based upon number of inputs? 【发布时间】:2016-04-27 22:59:58 【问题描述】:据我所知,(我是 c 的初学者)您可以定义数组的大小,前提是用户知道用户将提供多少输入。但是,如何根据输入的数量定义数组的大小?
例如,如果我必须提供 10 个数字作为输入,那么我如何声明一个数组,使其大小根据我的输入计数分配为 10? (我不知道这是否可能,但我想知道)
【问题讨论】:
这就是所谓的内存分配,不是初学者的水平。如果你真的有兴趣,那么谷歌一下 malloc、calloc 和 realloc。但如果你真的是初学者,继续学习,那会晚一点。 【参考方案1】:从 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.
注意:这种方法适用于相对较小的数组。如果您预计使用更大的数组,请不要使用这种方法,因为它可能导致未定义的行为(溢出自动存储区域)。请改用malloc
和free
。
【讨论】:
【参考方案2】:我认为你应该回顾一下 C 中的指针概念。 you can go through these videos
虽然为一维数组动态分配内存,但指针非常方便。
【讨论】:
这应该是一条评论 @ForeverStudent:这是对所提问题的可能答案,因为他是 C 语言的初学者,所以如果我使用指针编写 C 代码来回答他的查询,他将很难理解一次去。我认为最好让他了解指针并以这种方式理解它:)。请纠正我我错了 链接到外部资源可能会有所帮助,但这不是答案【参考方案3】:您当然可以使用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- 当然,指针不是数组,但我相信,在大多数情况下,这将达到目的。
【讨论】:
以上是关于如何根据输入数量定义数组大小?的主要内容,如果未能解决你的问题,请参考以下文章