跳转到内容
新建笔记

C语言函数中可变参数

可变参数概念: 可变参数是指在函数定义中,允许传递一个不确定数量的参数。典型的如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;
}
  1. va_list 类型 va_list 是一个数据类型,用于声明一个可变参数的访问指针。

  2. va_start 宏 va_start(args, format) 用来初始化 args,并告诉编译器 format 是最后一个固定参数。

  3. va_arg 宏 va_arg(args, type) 用于获取下一个参数,args 是存储可变参数的指针,type 是要获取的参数类型。

  4. 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。