从 C 中的函数返回数组
从 C 中的函数返回数组时,了解内存管理的复杂性至关重要。默认情况下,当函数退出时,函数内堆栈上分配的本地数组将被销毁。如果尝试在函数外部访问这些数组,此行为会导致未定义的行为。
在提供的代码中,在 uni 函数内的堆栈上创建数组 c:
<code class="c++">int c[10];</code>
尽管该数组已成功填充函数中的值,但一旦函数返回并且数组被销毁,这些值就会丢失。这会导致您遇到意外的输出。
要解决此问题,您可以采用两种替代方法:
使用指针:
修改uni 函数返回指向已分配数组的指针:
<code class="c++">int* uni(int *a,int *b) { int* c = new int[10]; // Allocate array on heap int i = 0; // ...same code as before... return c; }</code>
在 main 中,您应该负责释放堆中分配的内存:
<code class="c++">int main() { // ...same code as before... delete[] c; // Deallocate array from heap // ... }</code>
使用结构体:
另一种方法是将数组包装在结构体中并返回结构体:
<code class="c++">struct myArray { int array[10]; }; myArray uni(int *a,int *b) { myArray c; int i = 0; // ...same code as before... return c; }</code>
在这种情况下,结构体按值返回,确保复制该数组是在主函数中创建的。由于结构体的值语义,可以有效地复制结构体返回值。
以上是如何从 C 函数返回数组而不丢失数据?的详细内容。更多信息请关注PHP中文网其他相关文章!