在C语言中,我们可以使用变量函数,如:
void abc(int x, .. )
{
}
我们可以使用可变数量的参数调用它们,如:
abc(1,2,3) or abc(1,2,3,4,5)
但是,在上述两个函数调用中,我们使用我们已知的参数调用了可变参数函数abc
;第一种情况下为“1,2,3”,第二种情况下为“1,2,3,4,5”。
我的问题是:
有没有办法在运行时调用用户输入的可变数量参数的可变参数函数?
例如,在main()
中,我要求用户输入一定数量的输入,然后使用参数p1,p2,p3等将这些输入传递到可变参数函数中......
答案 0 :(得分:1)
您可以使用数组,例如:
void abc(int size, int *arr) { }
主要
int size;
int A[MAX];
size = 3;
A[0] = 1; A[1] = 2; A[2]=3;
abc(size,A);
示例强>
int size=0;
int A[MAX];
while(size<MAX && scanf(" %d",&A[size])!=EOF) {
size++;
}
if(size>0) abc(size, A);
答案 1 :(得分:1)
实际上和理论上,尽管变通办法很可能发明这样的东西是不可取的......使用一些好的数据结构如linked list
来存储任意数量的元素并在调用函数中传递头指针。 / p>
答案 2 :(得分:0)
不,这是不可能的。
编译器需要在编译期间为标识符生成适当的代码并保留空间。您将尝试更改静态二进制文件,这是不可能的。这实际上是va_args
存在的原因,能够传递未知数量的参数。
答案 3 :(得分:0)
看起来您应该将指针传递给数组。
void yourfunction(int *array, size_t len) {
//Do what you want in your function
}
答案 4 :(得分:0)
你不能轻易做到这一点。 变量参数函数根据某个调用约定进行编译。 因此,任何动态模仿调用约定的尝试都不可移植。
如果你真的需要这样做的一个解决方案是使用libffi。 有一些支持调用variadic函数。
否则我同意其他使用大小作为参数的数组的解决方案。