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ể truyề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ần chỉ mục.
Nếu bạn muốn truyền một mảng đơn 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 tạo ra 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 sẽ được nhận.
Cách 1
Các tham số chính thức như một con trỏ như sau:
void myFunction(int *param) { . . . }
Cách 2
Các tham số chính thức như một mảng có kích thước như sau:
void myFunction(int param[10]) { . . . }
Cách 3
Các tham số chính thức như 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ẽ lấy 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ố được truyền, nó sẽ trả về 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à 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 khi hàm có liên quan vì C ++ không thực hiện giới hạn kiểm tra các tham số chính thức.