c /c++变参函数

实现c/c++语言的变参函数。

变参函数 :void fun(para,...)

变参函数必须要有一个固定参数。

 

在头文件stdarg.h中定义了三个宏可以用到:    
void    va_start(va_list    arg, prev_param    );    

type    va_arg(va_list    arg, type    );    

void    va_end(va_list    arg    );   

 
va在这里是variable-argument(可变参数)的意思.    

那么变参函数的实现就变得相对简单很多。

一般的变参函数处理过程:

①定义一个va_list变量设为va

②调用va_start()使得va存放变参函数的变参前的一个固定参数的地址。

③不断调用va_arg()使得va指向下一个变参。

④最后调用va_end()表示变参处理完成。

 原理就是:函数的参数在内存中从低地址向高地址依次存放。

看一个例子:模仿pritnf的实现:

#include<iostream>
#include<stdarg.h>
#include<string.h>
using namespace std;

void func(char *c,...){
	
	int i=0;
	double result=0;
	va_list arg;	//va_list变量
	va_start(arg,c);	//arg指向固定参数c
	while(c[i]!='\0'){
		
		if(c[i]=='%'&&c[i+1]=='d'){
			printf("%d",va_arg(arg,int));
			i++;
		}
		else if(c[i]=='%'&&c[i+1]=='f'){
			printf("%f",va_arg(arg,double));
			i++;
		}	
		else {
			char newc[2] = {c[i]};	//将字符转换为字符串输出,也可以用putchar()
			printf("%s",newc);
		}	
		i++;
	}
	va_end(arg);
}


int main(){
	int i=100;
	double j=100.0;
	printf("%d be equal %f\n",i,j);
	func("%d be equal %f\n",i,j);
	

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值