C语言学习,标准库 <stdarg.h>
<stdarg.h> 是 C 标准库中的头文件,它提供了一种机制来处理可变参数函数。<stdarg.h> 头文件定义了一个变量类型 va_list 和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。可变参数的函数通在参数列表的末尾是使用省略号 ... 定义的。
类型定义:
va_list:这是一个用于存储可变参数信息的类型。通常,你会定义一个 va_list 类型的变量来操作可变参数列表。
宏定义:
va_start:用于初始化 va_list 变量,将其指向参数列表中的第一个可变参数。你需要传入 va_list 变量和最后一个传递给函数的已知固定参数(即省略号之前的参数)。
va_arg:用于获取 va_list 指针所指向的参数,并将指针移动到下一个参数的位置。你需要指定要访问的参数的类型。
va_end:用于清理 va_list 变量。这是一个好习惯,尽管在某些实现中可能不严格要求。
va_copy(可选):用于复制 va_list 变量。这不是所有实现都提供的,但它在一些情况下很有用,比如当你需要在处理参数列表的过程中保留原始参数列表的副本时。
示例: 可变参
#include <stdio.h>
#include <stdarg.h>
void print_numbers(int count, ...) {
va_list args;
va_start(args, count);
for (int i = 0; i < count; i++) {
int num = va_arg(args, int);
printf("%d ", num);
}
va_end(args);
printf("\n");
}
int main() {
print_numbers(3, 10, 20, 30); // 输出: 10 20 30
print_numbers(5, 1, 2, 3, 4, 5); // 输出: 1 2 3 4 5
return 0;
}