Tham số biến trong C

Tham số biến trong C là gì? Nếu chưa biết câu trả lời, dưới đây là những điều bạn cần biết về tham số biến trong C.

Các tham số và đối số

Thông tin có thể được chuyển sang hàm dưới dạng tham số. Tham số hoạt động giống như biến trong hàm.

Các tham số được chỉ định sau tên hàm, bên trong dấu ngoặc đơn. Bạn có thể thêm nhiều dấu ngoặc như ý muốn, chỉ cần tách chúng bằng dấu phẩy.

Công thức:

returnType functionName(parameter1, parameter2, parameter3) {
  // code được triển khai
}

Hàm sau nhận một chuỗi ký tự với name (tên) là tham số. Khi gọi hàm, bạn chuyển tên, thường được dùng bên trong hàm để in “Hello” và tên của từng người.

Ví dụ:

void myFunction(char name[]) {
  printf("Hello %s\n", name);
}

int main() {
  myFunction("Liam");
  myFunction("Jenny");
  myFunction("Anja");
  return 0;
}

// Hello Liam
// Hello Jenny
// Hello Anja

Khi gắn tham số vào hàm, nó được gọi là đối số. Như vậy, ở ví dụ trên, name là tham số, Liam, Jenny và Anja là đối số.

Nhiều tham số

Bên trong hàm này, bạn có thể thêm nhiều tham số như ý muốn. Ví dụ:

void myFunction(char name[], int age) {
  printf("Hello %s. You are %d years old.\n", name, age);
}

int main() {
  myFunction("Liam", 3);
  myFunction("Jenny", 14);
  myFunction("Anja", 30);
  return 0;
}

// Hello Liam. You are 3 years old.
// Hello Jenny. You are 14 years old.
// Hello Anja. You are 30 years old.

Đôi khi trong một số trường hợp, bạn muốn có một hàm 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.

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("QTM 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ố.

Kết quả tham số biến trong C

Bài trước: Đệ quy trong C

Bài tiếp: Quản lý bộ nhớ trong C

Thứ Hai, 09/01/2023 16:42
52 👨 1.443
0 Bình luận
Sắp xếp theo
    ❖ Lập trình C