Một mảng cục bộ không thể được trả về trực tiếp từ một hàm C++ vì nó có thể không còn tồn tại trong bộ nhớ sau khi gọi hàm. Cách giải quyết là sử dụng mảng static trong hàm. Vì thời gian sống của mảng static là toàn bộ chương trình, nó có thể dễ dàng được trả về từ hàm C++ mà không gặp vấn đề trên.
Chương trình dưới đây minh họa điều này.
Ví dụ
#include <iostream>
using namespace std;
int* retArray() {
static int arr[10];
for (int i = 0; i < 10; i++) {
arr[i] = i + 1;
}
return arr;
}
int main() {
int *ptr = retArray();
cout << "Các phần tử mảng là: ";
for (int i = 0; i < 10; i++) {
cout << ptr[i] << " ";
}
return 0;
}
Kết quả
Các phần tử mảng là: 1 2 3 4 5 6 7 8 9 10
Hãy hiểu chương trình trên.
Trong hàm retArray(), một mảng tĩnh arr được định nghĩa. Sau đó vòng lặp for dùng để khởi tạo mảng này. Cuối cùng mảng arr được trả về.
int* retArray() {
static int arr[10];
for (int i = 0; i < 10; i++) {
arr[i] = i + 1;
}
return arr;
}
Trong hàm main(), hàm retArray() được gọi và ptr trỏ đến đầu mảng arr. Các phần tử mảng được hiển thị bằng vòng lặp for.
int main() {
int *ptr = retArray();
cout << "Các phần tử mảng là: ";
for (int i = 0; i < 10; i++) {
cout << ptr[i] << " ";
}
return 0;
}