您可以使用指標從 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
另一個選擇是使用結構體來包裝陣列。這可以透過值返回,並且結構將被複製,包括其內部的數組。
<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中文網其他相關文章!