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

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.

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

【讨论】:

【参考方案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- 当然,指针不是数组,但我相信,在大多数情况下,这将达到目的。

【讨论】:

以上是关于如何根据输入数量定义数组大小?的主要内容,如果未能解决你的问题,请参考以下文章

创建类时如何定义数组的大小?

C++问题:如何定义一个未知大小的一维数组,数组大小由输入的值决定

C语言如何定义一个可变大小的数组

C语言如何定义一个N行N列的二维数组任意输入数据

如何让字符串数组的Contains忽略大小写

如何定义一个动态的数组