Tham số biến trong C



Đôi khi trong một số trường hợp, khi bạn muốn có một hàm, mà có thể nhận các tham số thay cho các tham số đã được định nghĩa trước. Ngôn ngữ C cung cấp cho bạn giải pháp cho tình huống này và bạn được phép để định nghĩa một hàm mà chấp nhận các tham số hàm dựa vào các yêu cầu của bạn. Dưới đây là ví dụ cho việc định nghĩa các hàm như vậy:

int tenham(int, ... ) 
{
   .
   .
   .
}

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

Bạn nên ghi nhớ rằng hàm tenham() có tham số cuối dạng tĩnh, ví dụ: ba dấu chấm () và tham số trước nó luôn luôn là int mà sẽ biểu diễn tổng số tham số biến được truyền. Để sử dụng tính năng này, bạn cần sử dụng Header file là stdarg.h mà cung cấp các hàm và macro để thực hiện tính năng này theo các bước:

  • Định nghĩa một hàm với tham số cuối ở dạng tĩnh và tham số đằng trước nó luôn luôn là int mà biểu diễn số các tham số.

  • Tạo một biến kiểu va_list trong định nghĩa hàm. Kiểu này được định nghĩa trong stdarg.h.

  • Sử dụng tham số int và macro là va_start để khởi tạo biến va_list tới một danh sách tham số. Macro va_start này được định nghĩa trong stdarg.h.

  • Sử dụng macro là va_arg và biến va_list để truy cập mỗi mục trong danh sách tham số.

  • Sử dụng một macro là va_end để xóa bộ nhớ được chỉ định tới biến va_list.

Quảng cáo

Bây giờ chúng ta theo các bước trên và viết một hàm đơn giản mà có thể nhận các tham số và trả lại giá trị trung bình của chúng:

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

double giatriTB(int sothamso,...)
{

    va_list thamso;
    double tong = 0.0;
    int i;

    /* khoi tao thamso cho sothamso (la so tham so) */
    va_start(thamso, sothamso);

    /* truy cap tat ca tham so da duoc gan cho thamso */
    for (i = 0; i < sothamso; i++)
    {
       tong += va_arg(thamso, int);
    }
    /* xoa bo nho danh rieng cho thamso */
    va_end(thamso);

    return tong/sothamso;
}

int main()
{
   printf("Gia tri trung binh cua 7, 8, 9, 10  la: %f\n", giatriTB(4, 7,8,9,10));
   printf("Gia tri trung binh cua 11, 22, 33 la: %f\n", giatriTB(3, 11,22,33));
   
   printf("\n===========================\n");
    printf("VietJack chuc cac ban hoc tot! \n");
}

Biên dịch và chạy chương trình C trên sẽ cho kết quả như dưới đây. Bạn nên ghi nhớ rằng hàm giatriTB() được gọi hai lần và trong mỗi lần thì tham số đầu tiên biểu diễn tổng các tham số biến được truyền. Chỉ có các tham số tĩnh sẽ được sử dụng để truyền số các tham số.

Tham số biến trong C

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Các bài học lập trình C phổ biến khác tại VietJack:



Tài liệu giáo viên