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ó.