C语言 不定长入参 传递给不定长入参的函数
时间: 2023-11-21 13:06:23 浏览: 64
C语言中可以使用可变参数列表来实现不定长的入参传递,同时也可以将可变参数列表传递给另一个接收可变参数列表的函数。具体步骤如下:
1. 声明一个接收可变参数列表的函数,如下例所示:
```c
int print(char* format, ...);
```
2. 在该函数中定义一个va_list类型的变量,用来存储可变参数列表。然后使用宏va_start()初始化这个变量,如下例所示:
```c
#include <stdarg.h>
int print(char* format, ...)
{
va_list args;
va_start(args, format);
// ...
}
```
3. 在该函数中使用va_start()宏获取可变参数列表中的第一个参数(通常是格式字符串),然后使用vprintf()或vfprintf()等函数来输出可变参数列表中的参数,如下例所示:
```c
#include <stdarg.h>
#include <stdio.h>
int print(char* format, ...)
{
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
return 0;
}
```
4. 在另一个函数中调用上述接收可变参数列表的函数,并将可变参数列表传递给它,如下例所示:
```c
int test()
{
print("%s %d %f", "Hello", 123, 3.14);
return 0;
}
```
需要注意的是,在将可变参数列表传递给另一个接收可变参数列表的函数时,需要先将可变参数列表进行拷贝,否则会出现未定义的行为。同时,在使用可变参数列表时,由于编译器无法对入参进行类型检查,因此需要开发者自己来保证传入的参数类型和数量的正确性。