详解可变参数列表

来源:互联网 发布:淘宝买家个人消费贷款 编辑:程序博客网 时间:2024/06/06 05:01

详解可变参数列表

首先我是个渣渣,本文仅限参考,谢谢

stdarg宏
可变参数列表是通过宏来实现的,这些宏定义stdarg.h头文件,它是标准库的一部分。这个头文件声明了一个类型va_list和三个宏——va_start、va_arg、va_end。我们可以声明一个类型为va_list的变量,与这几个宏配合使用,访问参数的值。

下面的函数就是运用可变参数模拟实现

#include<stdio.h>#include<stdlib.h>#include<stdarg.h>//可变参头文件void print(const char*format,...){  va_list arg;  char*para=0;  va_start(arg,format);//用a_start来初始化arg
  while(*format)  {  switch(*format)  {   case's':para=va_arg(arg,char*);while(*para){ putchar(*para); para++; } break;case'c':putchar(va_arg(arg,char));break;default:putchar(*format);break;    }   format++;       }       va_end(arg);//用a_end来结束调用  }  int main()  {print("s ccc.\n","hello","b","i","t");  system("pause");  return 0;        }


这里用到了va_list,va_start,va_end,va_arg

1、函数声明了一个va_arg来访问可变参数未访问的地方,这个变量是用va_start来初始化的;

2、为了访问参数,需用va_arg来接受两个参数:a_list和列表中下一位的参数
3、最后调用完参数后,须调用a_end来结束调用

对于这些宏存在两个基本限制,

1、这些宏无法判断实际存在参数的数量

2、这些宏无法判断实际参数的类型







2 0
原创粉丝点击