C語言——stdarg.h

C語言不支持函數重載,但支持可變參數。在 stdarg.h 中提供了3個方法和1個結構。數組

struct va_list,參數列表函數

void va_start(va_list,int); 訪問參數前的準備工做spa

void va_arg(va_list,void);訪問參數,注意參數中的void指數據類型,實際調用時應該是int,float,char等指針

void va_end(va_end);訪問結束後清理工做code

使用過程blog

#include <stdio.h>
#include <stdarg.h>

int main(){
    int sum(int c,...);
    
    int c = sum(6,1,2,3,4,5,5);
    
    printf("sum = %d\n",c);
    return 0;
}

int sum(int c,...){
    va_list var_list;
    int count = 0;
    va_start(var_list,c);
    for(;c>0;c--){
        count+=va_arg(var_list,int);
    }
    va_end(var_list);
    return count;
}

注意:內存

聲明可變參數方法時,第一個參數應爲int,用來代表參數數量,是不能省略的io

 

我的感受:class

1.可變參數能夠理解爲傳遞給方法一個指針,參數數組的指針,由於數組指針做爲參數,接受參數的方法是不知道數組大小的,因此還要傳遞一個參數數量,這也說明了爲何可變參數的第一個int參數不可省略。數據類型

2.va_start();應該是初始化了一下參數指針,由於沒有這個過程參數訪問就會失敗。

3.va_arg();這個很明顯了,就是指針解引用,並向後移動。

4.va_end();這個也很好理解,確定是釋放內存了,而且銷燬指針。

相關文章
相關標籤/搜索