Mengembalikan Tatasusunan daripada Fungsi dalam C
Apabila mengembalikan tatasusunan daripada fungsi dalam C , adalah penting untuk memahami selok-belok pengurusan memori . Secara lalai, tatasusunan setempat yang diperuntukkan pada timbunan dalam fungsi dimusnahkan apabila fungsi keluar. Tingkah laku ini membawa kepada tingkah laku yang tidak ditentukan jika percubaan dibuat untuk mengakses tatasusunan ini di luar fungsi.
Dalam kod yang disediakan, tatasusunan c dicipta pada tindanan dalam fungsi uni:
<code class="c++">int c[10];</code>
Walaupun tatasusunan ini berjaya diisi dengan nilai dalam fungsi, nilai itu hilang sebaik sahaja fungsi itu kembali dan tatasusunan dimusnahkan. Ini mengakibatkan output tidak dijangka yang anda hadapi.
Untuk mengatasi isu ini, anda boleh menggunakan dua pendekatan alternatif:
Menggunakan Penunjuk:
Ubah suai fungsi uni untuk mengembalikan penuding kepada tatasusunan yang diperuntukkan:
<code class="c++">int* uni(int *a,int *b) { int* c = new int[10]; // Allocate array on heap int i = 0; // ...same code as before... return c; }</code>
Secara utama, anda harus bertanggungjawab untuk menyamakan kedudukan memori yang diperuntukkan dalam timbunan:
<code class="c++">int main() { // ...same code as before... delete[] c; // Deallocate array from heap // ... }</code>
Menggunakan a Struct:
Pendekatan lain melibatkan membungkus tatasusunan dalam struct dan mengembalikan struct:
<code class="c++">struct myArray { int array[10]; }; myArray uni(int *a,int *b) { myArray c; int i = 0; // ...same code as before... return c; }</code>
Dalam kes ini, struct dikembalikan mengikut nilai, memastikan salinan tatasusunan dibuat dalam fungsi utama. Nilai pulangan struktur boleh disalin dengan cekap disebabkan oleh nilai semantik struct.
Atas ialah kandungan terperinci Bagaimana untuk Mengembalikan Array daripada Fungsi dalam C tanpa Kehilangan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!