
- C 標準庫
- C 庫 - 首頁
- C 庫 - <assert.h>
- C 庫 - <complex.h>
- C 庫 - <ctype.h>
- C 庫 - <errno.h>
- C 庫 - <fenv.h>
- C 庫 - <float.h>
- C 庫 - <inttypes.h>
- C 庫 - <iso646.h>
- C 庫 - <limits.h>
- C 庫 - <locale.h>
- C 庫 - <math.h>
- C 庫 - <setjmp.h>
- C 庫 - <signal.h>
- C 庫 - <stdalign.h>
- C 庫 - <stdarg.h>
- C 庫 - <stdbool.h>
- C 庫 - <stddef.h>
- C 庫 - <stdio.h>
- C 庫 - <stdlib.h>
- C 庫 - <string.h>
- C 庫 - <tgmath.h>
- C 庫 - <time.h>
- C 庫 - <wctype.h>
- C 標準庫資源
- C 庫 - 快速指南
- C 庫 - 有用資源
- C 庫 - 討論
- C 程式設計資源
- C 程式設計 - 教程
- C - 有用資源
C 庫 - va_arg() 宏
C 的stdarg 庫 va_arg() 宏用於接受可變數量引數的函式,並檢索由va_start 初始化的 va_list(可變引數列表)中的下一個引數。
在使用 va_arg 之前,應使用 'va_start(ap, last_arg)' 或 'va_copy(ap, src_ap)'(如果引數是從另一個 va_list 複製的)初始化型別為 va_list 的物件 ap。兩者之間不應出現對 va_end 的呼叫。
此宏對於可變引數函式非常有用,它從 arg_ptr 指向的位置檢索指定型別的 value,並將 arg_ptr 加 1 以指向列表中的下一個引數。
語法
以下是 va_arg() 宏的 C 庫語法:
type va_arg(va_list ap, type)
引數
此宏接受以下引數:
-
ap - 這是一個由 'va_start' 初始化的 va_list 型別變數。此變數用於遍歷引數列表。
type - 它表示我們要檢索的引數型別。它指定列表中下一個引數的資料型別。
返回值
此宏將下一個附加引數作為型別為 type 的表示式返回。
示例 1:數字求和
以下是一個基本的 C 示例,演示了 va_arg() 的用法。
#include <stdarg.h> #include <stdio.h> int Sum_of_num(int n, ...) { int Sum = 0; va_list ptr; va_start(ptr, n); for (int i = 0; i < n; i++){ Sum += va_arg(ptr, int); } va_end(ptr); return Sum; } int main() { printf("1 + 2 is %d\n", Sum_of_num(2, 1, 2)); printf("1 + 2 + 3 is %d\n", Sum_of_num(3, 1, 2, 3)); printf("1 + 2 + 3 + 4 is %d\n", Sum_of_num(4, 1, 2, 3, 4)); return 0; }
輸出
以下是輸出:
1 + 2 is 3 1 + 2 + 3 is 6 1 + 2 + 3 + 4 is 10
示例 2:查詢最大數
在這個例子中,我們使用 va_arg() 從傳入的引數中查詢最大數。
#include <stdarg.h> #include <stdio.h> int Largest_num(int n, ...) { va_list ap; va_start(ap, n); int max = va_arg(ap, int); for (int i = 0; i < n - 1; i++) { int temp = va_arg(ap, int); max = temp > max ? temp : max; } va_end(ap); return max; } int main() { printf("%d\n", Largest_num(2, 1, 2)); printf("%d\n", Largest_num(3, 1, 2, 3)); printf("%d\n", Largest_num(4, 6, 2, 3, 4)); return 0; }
輸出
以下是輸出:
2 3 6
示例 3
讓我們來看另一個例子,建立一個可變引數函式,該函式檢索並列印傳遞給它的每個引數。
#include <stdio.h> #include <stdarg.h> void print_numbers(int count, ...) { va_list args; // Initialize the va_list variable va_start(args, count); // Retrieve and display each argument for (int i = 0; i < count; i++) { int num = va_arg(args, int); printf("Argument %d: %d\n", i + 1, num); } // Clean the va_list va_end(args); } int main() { printf("Displaying 3 numbers:\n"); print_numbers(3, 10, 20, 30); printf("\nDisplaying 5 numbers:\n"); print_numbers(5, 1, 2, 3, 4, 5); return 0; }
輸出
以下是輸出:
Displaying 3 numbers: Argument 1: 10 Argument 2: 20 Argument 3: 30 Displaying 5 numbers: Argument 1: 1 Argument 2: 2 Argument 3: 3 Argument 4: 4 Argument 5: 5
廣告