ポインタを使用して、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 サイトの他の関連記事を参照してください。