Hàm có số lượng tham số thay đổi
Bài học 10 trên 17 trong khóa học Hàm trong C của Coddy.
Trong C, cũng như các ngôn ngữ lập trình khác, có một khái niệm gọi là hàm variadic, tức là hàm nhận số lượng tham số không giới hạn.
Để dùng hàm variadic, trước tiên ta cần thêm tệp tiêu đề <stdarg.h>.
Hãy xem ví dụ để biết cách hoạt động:
#include <stdio.h>
#include <stdarg.h>
int sum(int num, ...) {
va_list list;
va_start(list, num);
int sum = 0;
for (int i = 0; i < num; i++) {
sum += va_arg(list, int);
}
va_end(list);
printf("%d", sum);
}
int main() {
sum(2, 20, 30);
return 0;
}Trong ví dụ này, hàm sum tính tổng một số lượng giá trị số nguyên thay đổi.
Khai báo biến để lưu danh sách đối số bằng macro
<strong>va_list</strong>:va_list list;Khởi tạo danh sách đối số:
va_start(list, num);Khai báo biến để lưu tổng:
int sum = 0;Duyệt qua tất cả phần tử, lấy từng đối số rồi cộng vào tổng:
for (int i = 0; i < num; i++) { sum += va_arg(list, int); }Dọn dẹp danh sách đối số sau khi tính xong:
va_end(list);Trong hàm
<strong>main</strong>, gọi hàm<strong>sum</strong>như sau:sum(2, 20, 30);
Thử thách
DễDùng hàm nhận số lượng đối số linh hoạt, tạo một hàm có tên average để tính và in ra điểm trung bình của học sinh.
Tự làm thử
#include <stdio.h>
#include <stdarg.h>
// Hàm (function) tính giá trị trung bình
int main() {
// Gọi hàm nhận số lượng đối số không cố định | Đừng thay đổi dòng này
average(4, 85, 90, 78, 92);
return 0;
}Tất cả bài học trong Hàm trong C
1Giới thiệu
Giới thiệu2Hàm trong C
Giới thiệuTham số của hàmGiá trị trả vềPhạm vi biếnBiến bên ngoàiGiá trị và con trỏHàm đệ quyMảng làm tham sốHàm có số lượng tham số thay đổiThử thách ôn tậpTự luyện tập: Trình biên dịch C online