首頁 >後端開發 >C++ >如何從 C 中的函數安全地傳回數組?

如何從 C 中的函數安全地傳回數組?

Linda Hamilton
Linda Hamilton原創
2024-10-30 08:16:02248瀏覽

How do you safely return an array from a function in C  ?

從C 語言中的函數傳回數組

在C 語言中,從函數傳回數組可能是潛在的錯誤來源,特別是如果數組在堆疊上分配。

考慮以下程式碼:

<code class="cpp">#include <iostream>

using namespace std;

int* uni(int *a, int *b) {
    int c[10];
    int i = 0;
    while (a[i] != -1) {
        c[i] = a[i];
        i++;
    }
    for (; i < 10; i++)
        c[i] = b[i - 5];

    return c;
}

int main() {
    int a[10] = {1, 3, 3, 8, 4, -1, -1, -1, -1, -1};
    int b[5] = {1, 3, 4, 3, 0};
    int *c = uni(a, b);
    for (int i = 0; i < 10; i++)
        cout << c[i] << " ";
    cout << "\n";

    return 0;
}</code>

在此程式碼中,uni() 函數建立陣列 c 並合併陣列 a 中的非負數和 b 進入 c。但是,當程式碼嘗試傳回 c 時,陣列超出範圍,導致傳回垃圾值。

為了避免此問題,通常建議將陣列作為函數指標傳遞並傳回指標。但是,使用指標可能很麻煩,在某些情況下,最好使用不同的方法。

一種替代方法是使用結構體或類別來封裝陣列並按值傳回物件。考慮以下修改後的程式碼:

<code class="cpp">#include <iostream>

using namespace std;

struct myArray {
   int array[10];
};

myArray uni(int *a, int *b) {
    myArray c;
    int i = 0;
    while (a[i] != -1) {
        c.array[i] = a[i];
        i++;
    }
    for (; i < 10; i++)
        c.array[i] = b[i - 5];

    return c;
}

int main() {
    int a[10] = {1, 3, 3, 8, 4, -1, -1, -1, -1, -1};
    int b[5] = {1, 3, 4, 3, 0};
    myArray c = uni(a, b);
    for (int i = 0; i < 10; i++)
        cout << c.array[i] << " ";
    cout << "\n";

    return 0;
}</code>

在此範例中,uni() 函數傳回 myArray 結構的實例。結構體按值返回,並複製其內部數組,確保即使函數返回後值也有效。

以上是如何從 C 中的函數安全地傳回數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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