首頁  >  文章  >  後端開發  >  如何從 C 函數返回數組而不丟失資料?

如何從 C 函數返回數組而不丟失資料?

DDD
DDD原創
2024-10-29 20:18:29286瀏覽

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

從 C 中的函數傳回數組

從 C 中的函數傳回數組時,了解記憶體管理的複雜性至關重要。預設情況下,當函數退出時,函數內堆疊上分配的本地數組將被銷毀。如果嘗試在函數外部存取這些數組,此行為會導致未定義的行為。

在提供的程式碼中,在uni 函數內的堆疊上建立陣列c:

<code class="c++">int c[10];</code>

儘管該陣列已成功填充函數中的值,但一旦函數傳回並且陣列被銷毀,這些值就會遺失。這會導致您遇到意外的輸出。

要解決此問題,您可以採用兩種替代方法:

使用指標:

修改uni 函數傳回指向已指派陣列的指標:

<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>

在main 中,您應該負責釋放堆中分配的記憶體:

<code class="c++">int main()
{
    // ...same code as before...
    delete[] c; // Deallocate array from heap
    // ...
}</code>

使用結構體:

另一種方法是將數組包裝在結構體中並返回結構體:

<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>

在這種情況下,結構體按值返回,確保複製該數組是在主函數中創建的。由於結構體的值語義,可以有效地複製結構體回傳值。

以上是如何從 C 函數返回數組而不丟失資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn