Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengembalikan Array daripada Fungsi dalam C tanpa Kehilangan Data?

Bagaimana untuk Mengembalikan Array daripada Fungsi dalam C tanpa Kehilangan Data?

DDD
DDDasal
2024-10-29 20:18:29288semak imbas

 How to Return an Array from a Function in C   without Losing Data?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn