码迷,mamicode.com
首页 > 编程语言 > 详细

c /c++变参函数(转)

时间:2018-05-25 13:45:39      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:utc   blog   字符   char   hit   AC   stream   ace   ++   

原文转自 https://blog.csdn.net/wwzcx/article/details/8940092

 

实现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);
    

}

 

c /c++变参函数(转)

标签:utc   blog   字符   char   hit   AC   stream   ace   ++   

原文地址:https://www.cnblogs.com/happykoukou/p/9087100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!