Truyền mảng cho hàm như là tham số trong C

Nếu bạn muốn truyền một mảng một chiều dưới dạng tham số trong một hàm, bạn sẽ phải khai báo tham số chính thức của hàm theo một trong 3 cách sau và tất cả 3 phương thức khai báo này đều tạo kết quả giống nhau bởi vì, mỗi phương thức sẽ nói cho bộ biên dịch rằng một con trỏ nguyên sẽ được nhận.

Có thể truyền mảng đa chiều như là các tham số chính thức.

Cách 1

Các tham số chính thức như là một con trỏ như sau. Bạn sẽ học thế nào là con trỏ trong chương tới.

void tenham(int *tham_so)
{
.
.
.
}

Cách 2

Các tham số chính thức như là một mảng đã định kích cỡ như sau:

void tenham(int tham_so[10])
{
.
.
.
}

Cách 3

Các tham số chính thức như là một mảng chưa định kích cỡ như sau:

void tenham(int tham_so[])
{
.
.
.
}

Ví dụ

Bây giờ, giả sử hàm sau, mà sẽ nhận một mảng như là một tham số song song với tham số khác và trên cơ sở các tham số được truyền, nó sẽ trả về trung bình của các số được truyền thông qua mảng đó như sau:

double tinhgiatriTB(int arr[], int socuahang)
{
  int    i;
  double trungbinh;
  double tong;


  for (i = 0; i < socuahang; ++i)
  {
    tong += arr[i];
  }


  trungbinh = tong / socuahang;


  return trungbinh;
}

Bây giờ chúng ta gọi hàm trên như sau:

#include <stdio.h>


/* khai bao ham */
double tinhgiatriTB(int arr[], int socuahang);


int main ()
{
   /* mang so nguyen co 5 phan tu */
   int luonghangban[5] = {130, 222, 342, 137, 239};
   double trungbinh;


   /* truyen con tro toi ham duoi dang tham so */
   trungbinh = tinhgiatriTB( luonghangban, 5 ) ;


   /* hien thi ket qua tra ve */
   printf( "Gia tri trung binh la: %f ", trungbinh );


   printf("\n===========================\n");
   printf("Hoctv chuc cac ban hoc tot! \n");


   return 0;
}

Sao chép và dán 2 phần code trên vào một file. Sau đó, biên dịch và chạy chương trình C trên sẽ cho kết quả:

Như bạn có thể thấy, độ dài mảng không là vấn đề, tùy thuộc vào độ rộng của các hàm C có liên quan, bởi vì C không giới hạn thực hiện việc kiểm tra các tham số chính thức.

Bình luận