欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言的变参列表 va_list

程序员文章站 2022-07-09 20:54:44
1. va_list的基本原理和用法: 2. va_list 与 vsprintf 配合使用: 这也正是 printf 的原理。 扩展:Modern C++中的 initializer_list。 ......

1. va_list的基本原理和用法:

#include<stdio.h>
#include<stdarg.h>
void func(int i,char *ch,...){    //format
    va_list ap;
    va_start(ap,ch);              // 指向某一个参数,从此开始
    char *str;
    str=ch;
    do{
        printf("%s ",str);
        str=va_arg(ap,char*);     // 需要指定参数类型为char*型,不够灵活
    }while(str);
}
int main()
{  
    func(1,"a","b",null);
    return 0;
}

2. va_list 与 vsprintf 配合使用:

#include<stdio.h>
#include<stdarg.h>
void func(int i,char *fmt,...){     //format
    va_list ap;
    va_start(ap,fmt);
    char str[20];
    vsprintf(str, fmt, ap);
    va_end(ap);
    printf("%s\n",str);
}
int main()
{  
    char str1[]="str1";
    char str2[]="str2";
    int d=1000;
    func(1,"%s %s %d",str1,str2,d);
    return 0;
}

这也正是 printf 的原理。

扩展:modern c++中的 initializer_list。