📅  最后修改于: 2023-12-03 15:14:27.063000             🧑  作者: Mango
在C语言中,可以使用可变长度参数实现接受不定数量的参数。这在编写一些灵活的函数时非常有用,比如printf函数就使用了可变长度参数。
可变长度参数函数的定义方式如下:
#include <stdarg.h>
return_type function_name(int fixed_arg_num, ...)
{
va_list arg_list;
va_start(arg_list, fixed_arg_num);
/* do something */
va_end(arg_list);
}
其中,fixed_arg_num 表示固定参数的数量。'...'表示可变数量参数。
接下来是调用方式的示例:
function_name(fixed_arg1, fixed_arg2, ..., variable_arg1, variable_arg2, ...)
函数内部使用可变长度参数需要调用两个宏va_start和va_end,使用va_list类型定义参数列表。
下面来看一个实例。示例中定义了一个可变长度参数函数,计算不同类型变量的总和。
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
int sum(int count, ...)
{
int result = 0;
va_list arg_list;
va_start(arg_list, count);
for (int i = 0; i < count; i++)
{
int value = va_arg(arg_list, int);
result += value;
}
va_end(arg_list);
return result;
}
int main()
{
printf("%d\n", sum(1, 1));
printf("%d\n", sum(2, 1, 2));
printf("%d\n", sum(3, 1, 2, 3));
printf("%d\n", sum(4, 1, 2, 3, 4));
printf("%d\n", sum(5, 1, 2, 3, 4, 5));
return 0;
}
当函数调用sum(1, 1)时,函数返回值为1。当函数调用sum(2, 1, 2)时,函数返回值为3。当函数调用sum(3, 1, 2, 3)时,函数返回值为6。依此类推。
可以看到,这段代码中,一个int类型参数的值被传递给可变长度参数函数sum,在函数内部,先定义了变量result,初始值为0。传入的参数个数(count)被用来执行循环,每个参数使用va_arg获取,并被加到result上。最后,结果被作为函数的返回值返回。
在使用可变长度参数时,需要注意以下几点: