能否用变量自动声明任意输入个数的数组
时间: 2024-09-11 14:17:10 浏览: 41
在C语言中,变量自动声明并初始化任意数量的数组通常是不可能的,因为C语言的标准规定了数组大小必须是静态固定的。然而,有一些间接的方式可以实现类似的功能,例如使用变长数组(variable-length arrays, VLA)在C99及以上版本,或者使用动态内存分配如`malloc()`或`calloc()`。
**VLA的例子(仅限C99及以上)**:
```c
#include <stdio.h>
void processInputs(int count, ...) {
va_list args;
va_start(args, count);
int* arr = malloc(count * sizeof(int)); // 分配足够空间
for (int i = 0; i < count; i++) {
arr[i] = va_arg(args, int); // 从位置参数列表获取下一个整数
printf("arr[%d]: %d\n", i, arr[i]);
}
va_end(args);
free(arr); // 释放内存
}
// 调用示例:
int main() {
int n;
scanf("%d", &n);
processInputs(n, 1, 2, 3, 4, 5); // 可接受任意数量的输入
return 0;
}
```
在这个例子中,`processInputs`函数接受一个计数参数和一系列位置参数,可以根据传递给它的数值动态地创建和填充数组。
**动态内存分配的例子**:
```c
#include <stdio.h>
#include <stdlib.h>
void handleInputs(int *count, ...) {
va_list args;
va_start(args, count);
size_t size = *count * sizeof(int);
int* arr = (int*)malloc(size); // 动态分配内存
for (size_t i = 0; i < *count; i++) {
arr[i] = va_arg(args, int);
printf("arr[%zu]: %d\n", i, arr[i]);
}
va_end(args);
free(arr);
}
// 调用示例:
int main() {
int n;
scanf("%d", &n);
int inputArray[n]; // 用户需要预先知道数组长度
handleInputs(&n, inputArray); // 输入数组通过指针传递
return 0;
}
```
这里,用户需要先确定数组长度,并传递给`handleInputs`函数。
阅读全文