C ++ không cho phép truyền toàn bộ mảng làm đối số cho một hàm. Tuy nhiên, bạn có thể chuyển một con trỏ đến một mảng bằng cách chỉ định tên của mảng mà không có chỉ mục.
Nếu bạn muốn truyền một mảng một chiều làm đối 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 ba cách sau và cả ba phương thức khai báo đều cho kết quả tương tự vì mỗi phương thức cho trình biên dịch biết rằng một con trỏ số nguyên đang hoạt động sẽ được nhận.
Phương pháp-1
Các tham số chính thức dưới dạng một con trỏ như sau -
void myFunction(int *param) { . . . }
Phương pháp-2
Các tham số chính thức dưới dạng một mảng có kích thước như sau -
void myFunction(int param[10]) { . . . }
Phương pháp-3
Các tham số chính thức dưới dạng một mảng không có kích thước như sau -
void myFunction(int param[]) { . . . }
Bây giờ, hãy xem xét hàm sau, hàm này sẽ nhận một mảng làm đối số cùng với một đối số khác và dựa trên các đối số đã truyền, nó sẽ trả về giá trị trung bình của các số được truyền qua mảng như sau -
double getAverage(int arr[], int size) { int i, sum = 0; double avg; for (i = 0; i < size; ++i) { sum += arr[i]; } avg = double(sum) / size; return avg; }
Bây giờ, chúng ta hãy gọi hàm trên như sau -
#include <iostream> using namespace std; // function declaration: double getAverage(int arr[], int size); int main () { // an int array with 5 elements. int balance[5] = {1000, 2, 3, 17, 50}; double avg; // pass pointer to the array as an argument. avg = getAverage( balance, 5 ) ; // output the returned value cout << "Average value is: " << avg << endl; return 0; }
Khi đoạn mã trên được biên dịch cùng nhau và được thực thi, nó tạo ra kết quả sau -
Average value is: 214.4
Như bạn có thể thấy, độ dài của mảng không quan trọng đối với hàm vì C ++ không thực hiện kiểm tra giới hạn cho các tham số chính thức.