详解可变参数列表

详解可变参数列表

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

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':  
utchar(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、这些宏无法判断实际参数的类型







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值