ไม่สามารถส่งคืนอาร์เรย์ภายในเครื่องได้โดยตรงจากฟังก์ชัน 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; }