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

C語言可變參數實現 max_list:stdarg.h 實戰

     編輯:關於C語言

C語言可變參數實現 max_list:stdarg.h 實戰

需求:函數接受任意數量整數,以負數結尾,返回最大值。利用 <stdarg.h> 標準宏實現。

核心宏

  • va_list ap:參數列表指針。
  • va_start(ap, last_fixed):初始化,last_fixed 為最後一個固定參數(此處為計數佔位符)。
  • va_arg(ap, type):按類型取出下一個參數,移動指針。
  • va_end(ap):清理。

實現代碼

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

int max_list(int n, ...) {  // n 為佔位,實際由負數終止
    va_list ap;
    va_start(ap, n);
    int max = 0, current;
    while ((current = va_arg(ap, int)) >= 0) {
        if (current > max) max = current;
    }
    va_end(ap);
    return max;
}

int main() {
    printf("%d\n", max_list(10, 23, 89, 56, 83, 91, 100, -1));  // 輸出 100
    return 0;
}

注意事項

  • 調用時**必須以負數結尾**,否則會讀取棧上垃圾數據導致 UB。
  • 首個參數 n 此處未使用,僅滿足 va_start 要求「最後一個固定參數」。
  • 若需區分「無參數」與「最大值為 0」,可約定首個參數為數量或用特定哨兵。

stdarg.h 讓 C 擁有類型安全的可變參數能力,是 printf/scanf 族函數的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved