首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言可變參數詳解:va_list、va_start、va_arg、va_end 使用指南

     編輯:關於C語言

可變參數機制簡介

C 語言透過 <stdarg.h> 提供一組巨集,讓函式能接受不定數量的參數。核心類型與巨集如下:

  • va_list ap:宣告一個參數列表指標;
  • va_start(ap, last_fixed_arg):使 ap 指向第一個可變參數(last_fixed_arg 為最後一個固定參數);
  • va_arg(ap, type):取得目前參數值並將 ap 推進到下一個參數;
  • va_end(ap):清理 ap,結束可變參數處理。

完整範例:計算任意個整數的和

#include <stdarg.h>
#include <stdio.h>

int sum(int num_args, ...) {
    int val = 0;
    va_list ap;
    va_start(ap, num_args);
    for (int i = 0; i < num_args; i++) {
        val += va_arg(ap, int);
    }
    va_end(ap);
    return val;
}

int main(void) {
    printf("Sum of 10, 20 and 30 = %d\n", sum(3, 10, 20, 30));
    printf("Sum of 4, 20, 25 and 30 = %d\n", sum(4, 4, 20, 25, 30));
    return 0;
}

執行結果

Sum of 10, 20 and 30 = 60
Sum of 4, 20, 25 and 30 = 79

注意事項

  • 第一個固定參數通常用來傳遞可變參數的個數或格式字串(如 printf);
  • va_arg 的型別必須與實際傳入的參數型別完全一致,否則行為未定義;
  • 每個 va_start 必須搭配一個 va_end,否則可能導致記憶體洩漏或棧損壞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved