【问题标题】:How to define array size based upon number of inputs?如何根据输入数量定义数组大小?
【发布时间】:2016-04-27 22:59:58
【问题描述】:

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

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

【问题讨论】:

  • 这就是所谓的内存分配,不是初学者的水平。如果你真的有兴趣,那么谷歌一下 malloc、calloc 和 realloc。但如果你真的是初学者,继续学习,那会晚一点。

标签: c arrays variable-length-array


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多