C语言函数 变长参数

用C语言实现拥有变长参数列表的函数,由于参数是顺序压栈的,所以可以由程序员自己利用指针取到每一个参数

void  args_func(  Type *arg0, ... )

 {   

 Type *ap;  

 ap = ((Type *)&arg0) + sizeof(arg0);//取得栈顶地址加最后一个固定参数的地址偏移,得到第一个不定参数的地址        

 ap =  ap + sizeof(type);  //根据约定的不定参数类型取得下一个参数,每调用一次该句,取到下一个参数

...

}

变长参数列表至少有一个必有的参数,不能全部参数都为可选参数

在C语言里可以利用已定义好的一系列宏来实现变长参数:

#include<stdarg.h>//包含头文件

//假设有n个类型为Type的参数

void arg_func(int n,...)

{

 int i;

Type temp;

va_list ap;//定义一个 va_list类型的变量ap

va_start(ap,int);//初始化ap,使其指向最后一个必选参数

for(i=0;i<n;i++)

temp = va_arg(ap,Type);//顺次取得所有参数

va_end(ap);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值