如下代码为什么输出的结果不是1,2,3,4?
而是输出了错误的结果:1803629872 77304476 1803629872 0
#include <iostream>
#include <cstdarg>
// 函数:打印可变参数的值
void printValues(int count, ...) {
va_list args;
va_start(args, count);
for (int i = 0; i < count; ++i) {
int value = va_arg(args, int);
std::cout << value << " ";
}
va_end(args);
}
// 函数:将可变参数传递给另一个带有可变参数的函数
void processValues(int count, ...) {
va_list args;
va_start(args, count);
printValues(count, args);
va_end(args);
}
int main() {
processValues(4, 1, 2, 3, 4);
return 0;
}
printValues
期望后面是一堆int
,但是传给它的是一个va_list
。va_list
不是int
,当然就不对了。如果想想现在这样调用,那么
printValues
的参数就应该是va_list args
,而不是...
。printValues(int count, va_list args)
C 的 printf 就有 v 系列函数,比如:
int vprintf(const char *format, va_list arg);
就是用
va_list
作为参数。