您可以使用指针从 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中文网其他相关文章!