Danh sách tham số hàm

Danh sách tham số hàm

Khi gọi hàm một hàm với một tham số tùy ý có thể sử dụng dấu ... và các hàm trong thư viện <stdarg.h>.

Xem ví dụ sau:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdarg.h>

double average(int num,...) {
  double sum = 0.0;
  int i;

  va_list valist; // khai báo danh sách tham số
  va_start(valist, num); // khởi tạo danh sách tham số 
  for (i = 0; i < num; i++) {
    sum += va_arg(valist, int); // khởi tạo từng tham số
  }
  va_end(valist); // xóa bộ nhớ mà danh sách tham số sử dụng

  return sum / num;
}
int main() {
  printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2, 3, 4, 5)); // in 3.500000
  printf("Average of 5, 10, 15 = %f\n", average(3, 5, 10, 15)); // 10.000000
}

Hàm va_start()va_end() luôn đi với nhau. Vì số lượng các biến là có thể thay đổi nên các biến này cũng được khởi tạo và xóa trong bộ nhớ động heap. Hàm va_arg() khởi tạo biến trong bộ nhớ động tùy theo kiểu dữ liệu của nó.