天天看點

C語言的va_list使用方法

一、定義

在C++中又函數重載功能,C語言中也是又類似功能的,如經常見到的  int fun(char *format, ... ),該函數的參數個數是未定的,以此實作了類似重載的功能,我們用的最多的printf() 函數就是這樣實作的,現在來講講這個怎麼用:

正如大家知道的那樣,函數傳入的參數是儲存在棧中的,第一個參數在棧的最頂端,最後一個參數在棧的最底端,

對于函數void  fun(char *formt,...);進行調用fun("a","b","c","d","e","f","g");

va_list:複合類型,va_list  args;聲明變量args,可以看作為一個指針

va_start(args, formt):将args指向第一個參數"a"

va_arg(args, 參數類型):args指向下一個參數

va_end(args):将args置為無效

二、使用

#include <stdarg.h>
#include <iostream>

void fun(int a,...)
{
    va_list pp;
    int n=1;
    va_start(pp,a);
    do
    {
        printf("第 %d 個參數 =%d\n",n++,a);
        a=va_arg(pp,int);
    }
    while (a!=0);
    va_end(pp);
}

int main()
{
    fun(20,40,60,80,0);
    return 0;
}
           
C語言的va_list使用方法

 VA_LIST的用法: 

(1)首先在函數裡定義一具VA_LIST型的變量,這個變量是指向參數的指針; 

(2)然後用VA_START宏初始化變量剛定義的VA_LIST變量; 

(3)然後用VA_ARG傳回可變的參數,VA_ARG的第二個參數是你要傳回的參數的類型(如果函數有多個可變參數的,依次調用VA_ARG擷取各個參數); 

(4)最後用VA_END宏結束可變參數的擷取。

參考:

va_start()va_end()和vsnprintf()函數應用_算法随筆-CSDN部落格

va_list使用方法_一個菜鳥-CSDN部落格_va_list

上一篇: va_list函數

繼續閱讀