C中 stdarg.h
生活随笔
收集整理的這篇文章主要介紹了
C中 stdarg.h
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#include<stdarg.h>
stdarg.h是C語言中C標準函數(shù)庫的頭文件,stdarg是由standard(標準) arguments(參數(shù))簡化而來,主要目的為讓函數(shù)能夠接收可變參數(shù)。C++的cstdarg頭文件中也提供這樣的功能;雖然與C的頭文件是兼容的,但是也有沖突存在。
VA_LIST 是在C語言中解決變參問題的一組宏,所在頭文件:#include <stdarg.h>,用于獲取不確定個數(shù)的參數(shù)
va_start,函數(shù)名稱,讀取可變參數(shù)的過程其實就是在堆棧中,使用指針,遍歷堆棧段中的參數(shù)列表,從低地址到高地址一個一個地把參數(shù)內(nèi)容讀出來的過程·
va_start使va_list指向起始的參數(shù)
va_arg檢索參數(shù)C89
va_end釋放va_list
va_copy拷貝va_list的內(nèi)容
例1:
可變參數(shù)的函數(shù)
可變參數(shù)不定,參數(shù)為整型
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h> #include<windows.h> #include<stdarg.h>//有很多宏,可以處理可變參數(shù)的函數(shù)double add(int num, ...)//可變參數(shù),至少要定義一個 {double last = 0.0;int i;va_list argp;//創(chuàng)建一個char類型的指針va_start(argp, num);//從這里開始讀取參數(shù),讀取num個參數(shù),并把地址放在argpfor (i = 0;i < num;i++){double temp = va_arg(argp, double);printf("%f\n", temp);last += temp;}va_end(argp);//結束讀取return last; }int main() {int x = 10;double jieguo = 0;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個參數(shù)printf("last=%f", jieguo);system("pause"); return 0; }例2:
可變參數(shù)不定,參數(shù)為字符串
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h> #include<windows.h> #include<stdarg.h>//有很多宏,可以處理可變參數(shù)的函數(shù) #include<string.h>void go(int num, ...) {int i;va_list argp;//定義指針,用于存儲地址,不能加星號*va_start(argp, num);//代表有num個參數(shù)for (i = 0;i < num;i++){char str[50];//保存讀取的字符串參數(shù)strcpy(str, va_arg(argp, char *));//按照字符串的參數(shù)讀取一個參數(shù),復制到strprintf("%s", str);system(str);}va_end(argp);//結束讀取 }void main() {go(5, "notepad", "calc", "tasklist", "ipconfig", "mspaint"); }?
參考:
#include <stdarg.h>
C 標準庫 - <stdarg.h>
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的C中 stdarg.h的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: airpods二代降噪吗_华强北 苹果二
- 下一篇: html5语音读取文字_[电脑] 推荐