代码之家  ›  专栏  ›  技术社区  ›  overmass123

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

  •  1
  • overmass123  · 技术社区  · 8 年前

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

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

    3 回复  |  直到 8 年前
        1
  •  6
  •   Sergey Kalinichenko    8 年前

    从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
  •  1
  •   Harkirat Saluja    8 年前

    我认为你应该复习C语言中的指针概念。 you can go through these videos

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

        3
  •  1
  •   Community Egal    7 年前

    你当然可以利用 variable-length arrays (介绍于 C99 ),但请注意,在最新标准中 C11 ,这是一个 可选择的 特色最新的编译器不是 跳跃 以在将来支持此功能。如果您感兴趣,请查看 this answer .

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

    例子: (伪代码)

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

    在这里,您可以使用 input 变量值。

    P.S-指针当然不是数组,但我相信,在大多数情况下,这将达到目的。