在乙個c語言程式中,我們定義乙個函式,常規的引數個數都是有限的、確定的,如何讓這個函式具有乙個或多個以上的引數,這個時候就引入的可變引數的概念!這個就是基於棧幀理解的基礎來進行使用!
注意點:
可變引數必須從左到右進行訪問,可以不訪問完,但是一開始就訪問中間的引數是不被允許的;
引數列表至少有乙個命名引數才可以使用va_start,可以有多個引數,但是應該以最左邊為主;
這些巨集無法判斷引數的數量和型別;
va_start必須確保指定正確的型別,在後續的函式呼叫中是根據型別提取資料,一旦出錯,結果非常糟糕;
老規矩,上**:
1、使用可變引數,實現函式,求函式引數的最大值。
很想扒一波源**,但是我還不會。。。。。#include #include #include int max(int n, ...)//後續引數的個數是可變的
return m;
va_end(m);//結束,將arg指標指向null
}int main()
//能完成下面函式的呼叫,print("s ccc d.\n","hello",'b','i','t',100);
//函式原型:print(char *format, ...)
//分析題目意思:題目的意思是實現print函式,當第乙個引數讀到s時列印hello,
//當第乙個引數讀到c時,列印乙個字元;第乙個引數讀到d時,列印乙個整型數字100; 當讀到空格的時候,列印空格
#include #include#include //c標準函式庫的標頭檔案,stdarg是由standard arguments簡化而來,主要為讓函式能夠接收可變引數
#include void print(char *sen, ...)//後續引數的個數是可變的
else if (*sen == 'c')
else if (*sen == 'd')
sen++;
} va_end(arg);//結束,將arg指標指向null
}int main()
可變引數列表原始碼剖析
c語言中的可變引數列表,顧名思義,在c語言中有一些特殊的函式,它們的引數不是固定的,可以是多種型別的任意多個引數。比如最常用的printf函式和scanf函式,通過使用可變引數列表,使函式可以接收 1個的多種型別的引數。用printf函式的原型來舉例子 int printf const char f...
可變引數列表原始碼的剖析
c語言中的可變引數 1 c語言中的可變引數列表 c語言中有時候會遇到一些引數個數是可變的函式,像scanf,printf等,這些函式內部的引數列表都是可變的。通過將函式實現為可變引數的形式,使得函式可以接受1個以上的任意多個引數。不固定 如函式原型 scanf const char format,解...
可變引數列表原始碼的剖析
在某些情況下我們希望函式引數的個數可以根據實際需要來確定,所以c語言中就提供了一種長度不確定的引數,形如 通過將函式實現為可變引數的形式,可以使得函式可以接受1個以上的任意多個引數。典型的例子有printf scanf 函式等,下面就用printf函式的原型為例分析 int printf const...