可變引數的原始碼剖析和理解

2021-08-19 20:53:59 字數 1054 閱讀 6905

在乙個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...