ホームページ >バックエンド開発 >C++ >C で関数から配列を返すにはどうすればよいですか?

C で関数から配列を返すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-29 08:05:30538ブラウズ

How to Return an Array from a Function in C  ?

C の関数から配列を返す

ポインタを使用して、C の関数から配列を返すことができます。ただし、配列が適切に割り当てられていない場合、問題が発生する可能性があります。

この例では、スタックに割り当てられた配列を返そうとしています。これにより、関数が返されたときに未定義の動作が発生する可能性があります。

この問題を回避するには、new 演算子を使用してヒープに配列を割り当てることができます。その後、割り当てられた配列へのポインタを返すことができます。

<code class="C++">int* uni(int *a, int *b) {
    int *c = new int[10];
    int i = 0;
    while (a[i] != -1) {
        c[i] = a[i];
        i++;
    }
    for (; i < 10; i++) {
        c[i] = b[i - 5];
    }
    return c;
}</code>

その後、返されたポインタを使用して配列にアクセスできます。

<code class="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";
    delete[] c;
    return 0;
}</code>

これは出力します:

1 3 3 8 4 1 3 4 3 0

もう 1 つの方法は、構造体を使用して配列をラップすることです。これは値で返すことができ、内部の配列を含めて構造体がコピーされます。

<code class="C++">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>

これは次の出力も行います:

1 3 3 8 4 1 3 4 3 0

以上がC で関数から配列を返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。