最近我找到了带有三个点参数的函数原型.我编写了自己的函数并编译得很好:
void func(int a, ...){}
Run Code Online (Sandbox Code Playgroud)
那是什么意思?
更新
感谢你们!我想到了.这是我的例子:
void func(unsigned int n_args, int arg, ...)
{
for(unsigned int i = 0; i < n_args; ++i)
cout << *((int*)&arg + i) << ' ';
}
Run Code Online (Sandbox Code Playgroud)
此函数打印出由空格字符分隔的参数.
具有三个点的函数意味着您可以传递可变数量的参数.由于被调用函数并不真正知道传递了多少个参数,因此通常需要一些方法来告诉它.因此,您可以使用一些额外的参数来确定参数.
一个很好的例子printf.您可以传递任意数量的参数,第一个参数是一个字符串,它描述了传入的额外参数.
void func(int count, ...)
{
va_list args;
int i;
int sum = 0;
va_start(args, count);
for(i = 0; i < count; i++)
sum += va_arg(args, int);
va_end(ap);
printf("%d\n", sum);
}
Run Code Online (Sandbox Code Playgroud)
更新
要解决您的注释,您不需要参数的名称.这就是它的全部要点,因为你不知道在编译时你会传递哪些参数和多少参数.这取决于当然的功能.在上面的例子中,我假设只有ints通过了.如你所知printf,你传递任何类型,你必须解释它们.这就是为什么你需要一个格式说明符来告诉函数传递什么类型的参数的原因.或者如我的示例中所示,您当然可以假定特定类型并使用它.