可变参数列表

      C语言中可变参数列表是通过宏来实现的,这些宏包含在stdarg.h头文件中,该头文件定义了va_list类型和三个宏:va_start、va_arg、va_end。用法:首先声明一个va_list类型的变量,使用va_start宏进行初始化,va_start宏的第一个参数是该va_list类型的变量,第二个参数是非可变参数的最后一个参数,在访问可变参数时使用va_arg宏,该宏的第一个参数是va_list变量名第二个参数是参数列表中下一个参数的类型。va_arg宏返回该参数的值,并使变量指向下一个可变参数。当访问完最后一个参数之后,需要调用va_end宏。

      例:

      

从这个例子可以知道,可变参数是有限制的:

1、可变参数必须从头到尾逐个顺序的访问,可以访问几个变量后终止,但是不可以从一开始就访问中间的变量。

2、参数列表中至少要有一个命名参数,因为要使用va_start宏进行初始化。

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

4、这些宏无法判断每个参数的类型。

 

在C语言中使用可变参数列表最好的一个例子就是printf函数,该函数的命名参数就是格式化字符串,同时在格式化字符串中提供了后面可变参数的类型。

 

在使用可变参数列表需要注意的是如果在va_arg宏指定了错误的类型,其结果是不可预知,因为数据的本质都是二进制码,指定不同的类型只是访问时系统以不同的指令进行访问。并且char、short和float类型的值实际上将作为int或double类型的值传递给函数,因为va_arg宏无法准确识别作用于可变参数之上的缺省参数类型提升。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值