從 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中文網其他相關文章!