#include


 

#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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM