C支持参数可变的函数

 

: 当调用函数add_values(10,20,30,0)时,调用的堆栈为:

-------------

10

-------------

20

-------------

30

-------------

0

-------------

函数返回地址

-------------

 

可以通过宏va_listva_start va_arg va_end 来从堆栈中读出数据。

原理比较简单、就是指针++

函数

int add(int value,...)

{

va_list ptr;

int result=0;

result +=value;

va_start(ptr,value);

while((value = va_arg(ptr,int))!=0)

{

     result += value;

}

va_end(ptr);

return result;

}

void main (void)

{

printf("%d",add(1,2,3,0));

}

最后的0,是用来指示已经到达末尾,不要再读了;(此函数设计不好,假如我用add(1,2,0,3,0)就只加前面两个,这里只是一个例子)

printf() 也是采用更好的方式,它前面有 "字符串" 指示要读取多少个,所以不用一个特别的结束符号。

 

注:由于实现比较原始,所以容易出错,例如,在0之后指针再++,就会跑到返回地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值