核心代码示例
void sum(int count, ...) {
va_list vp;
va_start(vp, count);
int number = va_arg(vp, int);
cout << number << " ";
number = va_arg(vp, int);
cout << number << " ";
number = va_arg(vp, int);
cout << number << endl; //超出了给定的1,2,读出来的是未知数
va_end(vp);
}
// 定义一个函数,接受一个可变数量的参数
void print(const char* format, ...) {
va_list args; // 定义一个va_list变量,用来访问可变参数
va_start(args, format); // 初始化va_list变量,获取第一个可变参数
while (*format != '\0') {
switch (*format) {
case 'i': // 整数
cout << va_arg(args, int) << " ";
break;
case 'c': // 字符
cout << static_cast<char>(va_arg(args, int)) << " ";
break;
case 's': // 浮点数
cout << va_arg(args, double) << " ";
break;
case 'f': // 字符串
cout << va_arg(args, const char*) << " ";
break;
default: // 如果遇到未知的格式字符,输出错误并退出
cerr << "Unknown format character: " << *format << endl;
va_end(args);
return;
}
++format;
}
va_end(args); // 清理va_list变量
cout << endl;
}
int count(int count, ...) {
va_list args;// 定义一个va_list变量,用来访问可变参数
va_start(args, count); // 初始化va_list变量,获取第一个可变参数
int sum = 0;
int i = 0;
for (i; i < count; i++)
{
sum += va_arg(args, int);
}
return sum;
}
void main() {
sum(21, 1, 2);
print("icsf", 42, 'A', 3.14, "Hello, World!");
int sum = count(4, 60, 5, 6, 7);//60+5+6+7
cout << sum << endl;
sum = count(3, 60, 5, 6, 7);//此处指定的长度是3,只会加3个数,60+5+6
cout << sum << endl;
sum = count(5, 60, 5, 6, 7);//此处指定的长度是5,超过了后面的参数长度,末尾会加一个未知数,得出的结果无意义
cout << sum << endl;
getchar();
}
运行结果
1 2 11407395
42 A 3.14 Hello, World!
78
71
11407473