可变参数概念:
可变参数是指在函数定义中,允许传递一个不确定数量的参数。典型的如printf函数就是可变参数函数。
语法表示:
include <stdarg.h> // 提供了处理可变参数所需的数据类型和宏。void func(int fixed_param, ...)...前面至少要有一个固定参数,通常用于指示可变参数的相关信息,如数量、类型等。
示例1:
#include <stdio.h>#include <stdarg.h>
// 自定义的可变参数函数void my_printf(const char *format, ...) { va_list args; va_start(args, format); // 初始化args,format是最后一个固定参数
while (*format) { if (*format == '%' && *(format + 1) == 'd') { int num = va_arg(args, int); // 获取下一个参数,类型是int printf("%d", num); format++; // 跳过'd'字符 } else if (*format == '%' && *(format + 1) == 's') { char *str = va_arg(args, char*); // 获取下一个参数,类型是char* printf("%s", str); format++; // 跳过's'字符 } else { putchar(*format); // 输出普通字符 } format++; }
va_end(args); // 清理工作}
int main() { my_printf("Hello, %s! Your score is %d.\n", "Alice", 95); return 0;}-
va_list类型va_list是一个数据类型,用于声明一个可变参数的访问指针。 -
va_start宏va_start(args, format)用来初始化args,并告诉编译器format是最后一个固定参数。 -
va_arg宏va_arg(args, type)用于获取下一个参数,args是存储可变参数的指针,type是要获取的参数类型。 -
va_end宏va_end(args)用于结束对可变参数的处理,它必须在所有的可变参数都处理完后调用。
示例2:
#include <stdio.h>#include <stdarg.h>
// 可变参数求和函数double sum(int count, ...){ va_list args; va_start(args, count); double total = 0; for (int i = 0; i < count; i++) { double num = va_arg(args, double); total += num; } va_end(args); return total;}
int main(){ // 计算3个double类型数值的和 double result1 = sum(3, 1.5, 2.3, 3.7); printf("The sum of 1.5, 2.3, 3.7 is: %.2f\n", result1);
// 计算5个double类型数值的和 double result2 = sum(5, 10.2, 20.5, 30.1, 40.8, 50.3); printf("The sum of 10.2, 20.5, 30.1, 40.8, 50.3 is: %.2f\n", result2);
// 计算2个double类型数值的和 double result3 = sum(2, 99.99, 88.88); printf("The sum of 99.99 and 88.88 is: %.2f\n", result3);
return 0;}来源:CSDN 原文,首次发布于 2025-01-17。