Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Đối số độ dài biến (Variable Length Argument) trong C

Đôi khi cần hàm nhận số lượng đối số biến đổi thay vì số cố định. C/C++ hỗ trợ định nghĩa hàm chấp nhận số lượng tham số biến đổi.

int func(int, ...) { ... }
int main() {
    func(1, 2, 3);
    func(1, 2, 3, 4);
}

Lưu ý: tham số cuối cùng của func() là ellipsis (...), tham số ngay trước đó luôn là int đại diện cho tổng số đối số biến. Để dùng tính năng này, cần stdarg.h cung cấp macro/hàm:

  • Định nghĩa hàm với tham số cuối là ellipsis, tham số trước đó là int đếm số đối số.
  • Tạo biến va_list trong định nghĩa hàm (định nghĩa trong stdarg.h).
  • Dùng tham số int và macro va_start khởi tạo va_list.
  • Dùng macro va_arg và va_list truy cập từng đối số.
  • Dùng macro va_end dọn dẹp bộ nhớ cho va_list.

Ví dụ hàm tính trung bình cộng số lượng đối số biến:

Ví dụ

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

double average(int num, ...) {
    va_list valist;
    double sum = 0.0;
    int i;
    va_start(valist, num);
    for (i = 0; i < num; i++) {
        sum += va_arg(valist, int);
    }
    va_end(valist);
    return sum / num;
}

int main() {
    printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2, 3, 4, 5));
    printf("Average of 5, 10, 15 = %f", average(3, 5, 10, 15));
    return 0;
}

Kết quả

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000