我们通过模拟实现printf函数的部分功能说一下可变参数列表
#include<stdio.h>
#include<stdarg.h> //可变参数头文件
#include<string.h>
void print(char *format, ...)
{
va_list arg; //这是一个char类型的指针。
va_start(arg, format); //使指针指向第一个参数,初始化arg。
char *c = NULL;
while (*format != '\0')
{
if (*format == 's')
puts(va_arg(arg, char *)); //va_arg(arg,char *)是用来获取参数的,这里是一个char*类型的
else if (*format == 'c')
{
putchar(va_arg(arg, char));
}
else
{
putchar(*format);
}
format++;
}
va_end(arg); //停止获取参数。
}
int main()
{
print("sccc\n", "hello", 'b', 'i', 't');
getchar();
return 0;
}
可变参数的限制:
可变参数只能从第一个可变参数依次向后访问。
可变参数是通过宏来实现的,宏无法判断参数数据类型,所以我们必须使用命名参数。
版权声明:本文为pointer_y原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。