C语言中的可变参数(variable arguments)是一种特殊的参数类型,可以允许函数接受不确定数量的参数。可变参数的使用需要引入 C 标准库的stdarg.h头文件,并且需要使用固定格式的函数。
可变参数函数的定义
可变参数函数的定义需要以下三个步骤:
- 定义函数传入的最后一个参数,以便在函数中定位可变参数的起始位置。
C
int function_name(int par1, int par2, ...)
{
...
}
- 定义va_list类型变量,在函数内部使用va_start初始化它。
C
va_list ap;
va_start(ap, p2);
va_start函数的第二个参数是可变参数列表的前一个参数,用于确定参数列表的位置,即可变参数的开始位置。返回的指针将指向此参数(也就是第一个可变参数的位置)。
- 使用va_arg宏读取可变参数的值,并使用va_end释放ap。
C
int value1 = va_arg(ap, int); // 读取第一个可变参数
double value2 = va_arg(ap, double); // 读取第二个可变参数
...
va_end(ap);
可变参数函数的调用
可变参数函数调用需要按照三个步骤执行:
- 使用函数名和其他参数列表调用函数:
C
result = function_name(p1, p2, ...);
- 在需要多传递参数的位置传递额外的参数。
C
result = function_name(p1, p2, p3, p4, ...);
3.保证在固定参数之后传递的所有参数都是该函数期望接收的类型的参数。
示例1:计算可变参数的平均值
#include <stdarg.h>
#include <stdio.h>
double average(int num, ...)
{
va_list valist;
double sum = 0.0;
int i;
va_start(valist, num);
for (i = 0; i < num; i++)
{
sum += va_arg(valist, int);
}
va_end(valist);
return sum / num;
}
int main()
{
printf("Average of 2,3,4,5 = %f\n", average(4, 2, 3, 4, 5));
printf("Average of 5,10,15 = %f\n", average(3, 5, 10, 15));
return 0;
}
输出:
Average of 2,3,4,5 = 3.500000
Average of 5,10,15 = 10.000000
示例2:字符串连接
#include<stdlib.h>
#include<stdarg.h>
#include<stdio.h>
char* concat(int count, ...)
{
va_list args;
va_start(args, count);
size_t len = 1;
for (int i = 0; i < count; i++) {
len += strlen(va_arg(args, char*));
}
char* new_str = (char*)malloc(len * sizeof(char));
va_start(args, count);
new_str[0] = '\0';
for (int i = 0; i < count; i++) {
strcat(new_str, va_arg(args, char*));
}
va_end(args);
return new_str;
}
int main()
{
char *s1 = "Hello";
char *s2 = " World";
char *s3 = "!";
char *result = concat(3, s1, s2, s3);
printf("%s\n", result);
free(result);
return 0;
}
输出:
Hello World!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C 可变参数 - Python技术站