C 函式不定引數使用
阿新 • • 發佈:2021-02-19
技術標籤:C++
#include<stdio.h>
#include<stdarg.h>
/*函式引數的傳遞原理
函式引數是以資料結構:棧的形式存取,從右至左入棧.eg:
先介紹一下可變引數表的呼叫形式以及原理:
首先是引數的記憶體存放格式:引數存放在記憶體的堆疊段中,在執行函式的時候,從最後一個開始入棧。因此棧底高地址,棧頂低地址*/
//實現多個整數值相加
void add(int num, ...){//這裡設計是,num代表一共有幾個變參
va_list args;
int total=0;
va_start(args, num);//指向變參,也就是num引數的下一個引數
/*
只有將顯式名稱的最後一個引數傳給va_start,才可以找到可變引數的首地址
也就是說需要有至少一個形參
*/
while(num--){
total += va_arg(args, int);//假設全部是int型別,(這裡在獲得一個變參的值後,自動指向下一個變參)
}
va_end(args); //關閉args
printf("total = %d\n", total);
}
int main(int argc, char const *argv[])
{
int a=1,b=2,c=3;
add(2, a, b);//兩個引數
add(3, a, b, c);//三個引數
return 0;
}