Melalui Tatasusunan: Kemungkinan Perangkap
Semasa mengembalikan tatasusunan daripada fungsi dalam C kelihatan mudah, kerumitan tersembunyi boleh timbul, seperti yang ditunjukkan oleh pengalaman pengguna cuba menggabungkan nombor bukan negatif daripada dua tatasusunan menggunakan fungsi.
Pengguna memerhatikan output yang salah apabila mengakses tatasusunan yang digabungkan di luar fungsi yang menciptanya. Ini kerana tatasusunan yang dibuat pada tindanan, seperti yang diisytiharkan sebagai "int c[10]" dalam fungsi, dimusnahkan sebaik sahaja fungsi itu keluar. Mengaksesnya selepas itu menghasilkan gelagat yang tidak ditentukan.
Untuk menangani perkara ini, satu pilihan ialah menggantikan tatasusunan setempat dengan struct yang mengandungi tatasusunan. Apabila struct dikembalikan, tatasusunan dalamannya disalin ke dalam memori fungsi panggilan, dengan berkesan mengelakkan isu pemusnahan tindanan. Berikut ialah contoh:
<code class="cpp">struct myArray { int array[10]; }; myArray uni(int *a, int *b) { myArray c; // Same logic as before for merging arrays return c; }</code>
Secara utama, struct yang dikembalikan boleh diberikan dan tatasusunan dalaman diakses:
<code class="cpp">myArray c = uni(a, b); for (int i = 0; i < 10; i++) { cout << c.array[i] << " "; }</code>
Penyelesaian lain ialah menggunakan penuding untuk memperuntukkan memori untuk tatasusunan secara dinamik, seperti yang dibincangkan dalam bab "petunjuk lulus" anda. Walau bagaimanapun, ini memperkenalkan keperluan untuk mengurus memori secara manual dan mengelakkan kebocoran memori.
Pilihan pendekatan bergantung pada keperluan khusus, tetapi memahami perangkap ini adalah penting apabila bekerja dengan tatasusunan dalam fungsi.
Atas ialah kandungan terperinci Mengapa Tatasusunan Gabungan Saya Hilang Selepas Kembali daripada Fungsi dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!