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() và 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ó.