Cách Truyền mảng cho một hàm trong C

Trong hướng dẫn này, bạn sẽ học cách chuyển mảng (cả mảng một chiều và nhiều chiều) cho một hàm trong lập trình C với sự trợ giúp của các ví dụ.

Trong lập trình C, bạn có thể chuyển toàn bộ mảng cho các hàm. Trước khi chúng ta tìm hiểu điều đó, hãy xem cách bạn có thể chuyển các phần tử riêng lẻ của một mảng cho các hàm.

Chuyển các phần tử mảng riêng lẻ

Truyền các phần tử mảng cho một hàm tương tự như truyền các biến cho một hàm .

Ví dụ 1: Truyền các phần tử mảng riêng lẻ

#include <stdio.h>
void display(int age1, int age2) {
  printf("%d\n", age1);
  printf("%d\n", age2);
}

int main() {
  int ageArray[] = {2, 8, 4, 12};

  // pass second and third elements to display()
  display(ageArray[1], ageArray[2]); 
  return 0;
}

Đầu ra

8 4 

Ở đây, chúng ta đã truyền các tham số mảng cho display()hàm giống như cách chúng ta truyền các biến cho một hàm.

// pass second and third elements to display()
display(ageArray[1], ageArray[2]);

Chúng ta có thể thấy điều này trong định nghĩa hàm, trong đó các tham số của hàm là các biến riêng lẻ:

void display(int age1, int age2) {
  // code
}

Ví dụ 2: Truyền Mảng đến Hàm

// Program to calculate the sum of array elements by passing to a function 

#include <stdio.h>
float calculateSum(float num[]);

int main() {
  float result, num[] = {23.4, 55, 22.6, 3, 40.5, 18};

  // num array is passed to calculateSum()
  result = calculateSum(num); 
  printf("Result = %.2f", result);
  return 0;
}

float calculateSum(float num[]) {
  float sum = 0.0;

  for (int i = 0; i < 6; ++i) {
    sum += num[i];
  }

  return sum;
}

Đầu ra

Result = 162.50

Để truyền toàn bộ mảng cho một hàm, chỉ tên của mảng được truyền dưới dạng đối số.

result = calculateSum(num);

Tuy nhiên, hãy lưu ý việc sử dụng []trong định nghĩa hàm.

float calculateSum(float num[]) {
... ..
}

Điều này thông báo cho trình biên dịch rằng bạn đang truyền một mảng một chiều cho hàm.


Truyền mảng đa chiều cho một hàm

Để truyền mảng nhiều chiều cho một hàm, chỉ tên của mảng được truyền cho hàm (tương tự như mảng một chiều).

Ví dụ 3: Truyền mảng hai chiều

#include <stdio.h>
void displayNumbers(int num[2][2]);

int main() {
  int num[2][2];
  printf("Enter 4 numbers:\n");
  for (int i = 0; i < 2; ++i) {
    for (int j = 0; j < 2; ++j) {
      scanf("%d", &num[i][j]);
    }
  }

  // pass multi-dimensional array to a function
  displayNumbers(num);

  return 0;
}

void displayNumbers(int num[2][2]) {
  printf("Displaying:\n");
  for (int i = 0; i < 2; ++i) {
    for (int j = 0; j < 2; ++j) {
      printf("%d\n", num[i][j]);
    }
  }
}

Đầu ra

Enter 4 numbers:
2
3
4
5
Displaying:
2
3
4
5

Lưu ý tham số int num[2][2]trong nguyên mẫu hàm và định nghĩa hàm:

// function prototype
void displayNumbers(int num[2][2]);

Điều này cho thấy rằng hàm nhận một mảng hai chiều làm đối số. Chúng ta cũng có thể truyền các mảng có nhiều hơn 2 thứ nguyên như một đối số của hàm.

Khi truyền mảng hai chiều, không bắt buộc phải chỉ định số hàng trong mảng. Tuy nhiên, số lượng cột phải luôn được chỉ định.

Ví dụ,

void displayNumbers(int num[][2]) {
  // code
}

Lưu ý: Trong lập trình C, bạn có thể truyền mảng cho các hàm, tuy nhiên, bạn không thể trả về mảng từ các hàm.









Gõ tìm kiếm nhanh...