亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中可變參數函數有哪些

發布時間:2021-08-26 15:44:58 來源:億速云 閱讀:167 作者:小新 欄目:開發技術

這篇文章主要介紹C語言中可變參數函數有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

C語言可變參數函數

C 語言允許定義參數數量可變的函數,這稱為可變參數函數(variadic function)。這種函數需要固定數量的強制參數(mandatory argument),后面是數量可變的可選參數(optional argument)。

這種函數必須至少有一個強制參數。可選參數的類型可以變化。可選參數的數量由強制參數的值決定,或由用來定義可選參數列表的特殊值決定。

C 語言中最常用的可變參數函數例子是 printf()和 scanf()。這兩個函數都有一個強制參數,即格式化字符串。格式化字符串中的轉換修飾符決定了可選參數的數量和類型。

對于每一個強制參數來說,函數頭部都會顯示一個適當的參數,像普通函數聲明一樣。參數列表的格式是強制性參數在前,后面跟著一個逗號和省略號(...),這個省略號代表可選參數。

可變參數函數要獲取可選參數時,必須通過一個類型為 va_list 的對象,它包含了參數信息。這種類型的對象也稱為參數指針(argument pointer),它包含了棧中至少一個參數的位置。可以使用這個參數指針從一個可選參數移動到下一個可選參數,由此,函數就可以獲取所有的可選參數。va_list 類型被定義在頭文件 stdarg.h 中。

當編寫支持參數數量可變的函數時,必須用 va_list 類型定義參數指針,以獲取可選參數。在下面的討論中,va_list 對象被命名為 argptr。可以用 4 個宏來處理該參數指針,這些宏都定義在頭文件 stdarg.h 中:

void va_start(va_list argptr, lastparam);

宏 va_start 使用第一個可選參數的位置來初始化 argptr 參數指針。該宏的第二個參數必須是該函數最后一個有名稱參數的名稱。必須先調用該宏,才可以開始使用可選參數。

type va_arg(va_list argptr, type);

展開宏 va_arg 會得到當前 argptr 所引用的可選參數,也會將 argptr 移動到列表中的下一個參數。宏 va_arg 的第二個參數是剛剛被讀入的參數的類型。

void va_end(va_list argptr);

 當不再需要使用參數指針時,必須調用宏 va_end。如果想使用宏 va_start 或者宏 va_copy 來重新初始化一個之前用過的參數指針,也必須先調用宏 va_end。

void va_copy(va_list dest, va_list src);

宏 va_copy 使用當前的 src 值來初始化參數指針 dest。然后就可以使用 dest 中的備份獲取可選參數列表,從 src 所引用的位置開始。

 例 1 中的函數展示了這些宏的使用方法。

【例1】函數 add()

// 函數add() 計算可選參數之和
// 參數:第一個強制參數指定了可選參數的數量,可選參數為double類型
// 返回值:和值,double類型
double add( int n, ... )
{
  int i = 0;
  double sum = 0.0;
  va_list argptr;
  va_start( argptr, n );             // 初始化argptr
  for ( i = 0; i < n; ++i )       // 對每個可選參數,讀取類型為double的參數,
    sum += va_arg( argptr, double ); // 然后累加到sum中
  va_end( argptr );
  return sum;
}

以上是“C語言中可變參數函數有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克什克腾旗| 元阳县| 乡宁县| 房产| 郸城县| 望谟县| 江川县| 桃江县| 霸州市| 松滋市| 大港区| 色达县| 天镇县| 凭祥市| 伊吾县| 九台市| 凤阳县| 漯河市| 浦北县| 屏山县| 措勤县| 毕节市| 南丹县| 射洪县| 虞城县| 福州市| 扶余县| 乌拉特前旗| 濮阳市| 盘山县| 安西县| 习水县| 金山区| 达尔| 东阿县| 洪洞县| 达孜县| 横峰县| 米林县| 土默特右旗| 恩施市|