ไม่สามารถส่งคืนอาร์เรย์ภายในเครื่องได้โดยตรงจากฟังก์ชัน C++ เนื่องจากอาจไม่มีอยู่ในหน่วยความจำหลังจากการเรียกใช้ฟังก์ชัน วิธีแก้ไขปัญหานี้คือการใช้สแตติกอาร์เรย์ในฟังก์ชัน เนื่องจากอายุการใช้งานของสแตติกอาเรย์คือตลอดทั้งโปรแกรม จึงสามารถส่งคืนจากฟังก์ชัน C++ ได้อย่างง่ายดายโดยไม่มีปัญหาข้างต้น
โดยมีโปรแกรมสาธิตดังนี้
ตัวอย่าง
#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 <<"The array elements are: ";
for(int i = 0; i<10; i++) {
cout<< ptr[i] <<" ";
}
return 0;
} ผลลัพธ์
ผลลัพธ์ของโปรแกรมข้างต้นมีดังนี้
The array elements are: 1 2 3 4 5 6 7 8 9 10
ตอนนี้เรามาทำความเข้าใจโปรแกรมข้างต้นกัน
ในฟังก์ชัน retArray() จะมีการกำหนดอาร์เรย์อาร์เรย์แบบคงที่ จากนั้นใช้ for loop เพื่อเริ่มต้นอาร์เรย์นี้ ในที่สุดอาร์เรย์ arr จะถูกส่งกลับ ข้อมูลโค้ดที่แสดงเป็นดังนี้
int *retArray() {
static int arr[10];
for(int i = 0; i<10; i++) {
arr[i] = i+1;
}
return arr;
} ในฟังก์ชัน main() จะเรียกฟังก์ชัน retArray() และ ptr ชี้ไปที่จุดเริ่มต้นของอาร์เรย์ arr องค์ประกอบอาร์เรย์จะแสดงโดยใช้การวนซ้ำ ข้อมูลโค้ดที่แสดงเป็นดังนี้
int main() {
int *ptr = retArray();
cout <<"The array elements are: ";
for(int i = 0; i<10; i++) {
cout<< ptr[i] <<" ";
}
return 0;
}