#include<stdarg.h>
stdarg.h是C語言中C標准函數庫的頭文件,stdarg是由standard(標准) arguments(參數)簡化而來,主要目的為讓函數能夠接收可變參數。C++的cstdarg頭文件中也提供這樣的功能;雖然與C的頭文件是兼容的,但是也有沖突存在。
VA_LIST 是在C語言中解決變參問題的一組宏,所在頭文件:#include <stdarg.h>,用於獲取不確定個數的參數
va_start,函數名稱,讀取可變參數的過程其實就是在堆棧中,使用指針,遍歷堆棧段中的參數列表,從低地址到高地址一個一個地把參數內容讀出來的過程·
可變參數的函數
可變參數不定,參數為整型
1 #define _CRT_SECURE_NO_WARNINGS 2 3 #include<stdio.h> 4 #include<windows.h> 5 #include<stdarg.h>//有很多宏,可以處理可變參數的函數 6 7 double add(int num, ...)//可變參數,至少要定義一個 8 { 9 double last = 0.0; 10 int i; 11 12 va_list argp;//創建一個char類型的指針 13 va_start(argp, num);//從這里開始讀取參數,讀取num個參數,並把地址放在argp 14 15 for (i = 0;i < num;i++) 16 { 17 double temp = va_arg(argp, double); 18 printf("%f\n", temp); 19 last += temp; 20 } 21 va_end(argp);//結束讀取 22 23 return last; 24 } 25 26 main() 27 { 28 int x = 10; 29 double jieguo = 0; 30 31 jieguo = add(x, 1.2, 2.3, 3.4, 4.5, 5.6, 6.7, 7.8, 8.9, 9.10, 10.11);//x不定,如果x為10,則要讀入10個參數 32 33 printf("last=%f", jieguo); 34 35 system("pause"); 36 }
可變參數不定,參數為字符串
1 #define _CRT_SECURE_NO_WARNINGS 2 3 #include<stdio.h> 4 #include<windows.h> 5 #include<stdarg.h>//有很多宏,可以處理可變參數的函數 6 #include<string.h> 7 8 void go(int num, ...) 9 { 10 int i; 11 12 va_list argp;//定義指針,用於存儲地址,不能加星號* 13 14 va_start(argp, num);//代表有num個參數 15 16 for (i = 0;i < num;i++) 17 { 18 char str[50];//保存讀取的字符串參數 19 strcpy(str, va_arg(argp, char *));//按照字符串的參數讀取一個參數,復制到str 20 printf("%s", str); 21 system(str); 22 } 23 va_end(argp);//結束讀取 24 } 25 26 main() 27 { 28 go(5, "notepad", "calc", "tasklist", "ipconfig", "mspaint"); 29 }