就我所知,(如果是c中的初学者),只要用户知道用户将提供多少输入,就可以定义数组的大小。但是,如何根据输入数量来定义数组的大小?如何根据输入数量定义数组大小?
例如,如果我必须给出10个数字作为输入,那么我该如何声明一个数组,以便根据我的输入计数将其大小分配为10? (我不知道是否有可能,但我想知道)
就我所知,(如果是c中的初学者),只要用户知道用户将提供多少输入,就可以定义数组的大小。但是,如何根据输入数量来定义数组的大小?如何根据输入数量定义数组大小?
例如,如果我必须给出10个数字作为输入,那么我该如何声明一个数组,以便根据我的输入计数将其大小分配为10? (我不知道是否有可能,但我想知道)
从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
。
我想你应该在C语言中使用指针概念。 you can go through these videos
虽然为1d数组分配内存动态指针非常方便。
这应该是一个评论 – ForeverStudent
@ForeverStudent:这是一个可能的问题的答案,因为他是C的初学者,所以如果我用指针回答他的查询编写C代码,他将很难理解单身去。我认为如果他了解指针并以这种方式理解它,那将是最好的:)。请纠正我的错误 –
链接到外部资源可能会有帮助,但它不是一个答案 – ForeverStudent
你当然可以使用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-指针不是数组,当然,但我相信,对于大多数情况下,这将用于此目的。
这就是所谓的内存分配,它不是初学者级别。如果你真的有兴趣,那么谷歌的malloc,calloc和realloc。但是,如果你真的是初学者,只是继续学习,那会晚一些。 –