C 定義返回陣列的函式

2021-09-23 05:43:46 字數 918 閱讀 2555

最近遇到的乙個問題是寫c++的時候想要函式的返回值為乙個陣列,所以在定義函式返回值的型別的時候使用了指標。但是這時候返回的不能是在函式內部定義的陣列首位址,因為這個位址在函式執行完成之後就會刪除,導致呼叫這個函式的其他函式不能得到這個返回的陣列。後來發現可以借用new及其初始化解決這個問題,在函式內部不定義返回的位址,而是直接在return後面new乙個新的區域儲存需要返回的內容。這裡需要注意的是,c++中new是可以直接進行初始化的。簡單的**演示如下,用乙個函式返回乙個兩個數組成的陣列。

int

*return_array

(int a,

int b)

;return arr;

/*這種情況是錯誤的,僅有陣列的第乙個值能正確返回

可以這麼認為,其他的值還沒有返回就因為函式的結束

而被刪除了*/

return

newint[2

];/*先要正確返回乙個陣列,可以這樣使用new,但是會遇到

關於延遲初始化的warning,這個點我還沒有完全弄懂,但是

目前我這麼用沒有什麼問題

*/}int

main()

更新1

這幾天重新試了一下,對這個問題有了點新認識。如果上面那段**不在return後面new也是可以的。調換一下順序就可以寫成:

int

*createlist()

;return p;

}

這裡也能達到效果。這就說明在函式內部,宣告和new的儲存方式是不同的。查了一下,宣告出來的空間是儲存在棧上的,這部分空間會在函式結束時自動被釋放。而new出來的空間是儲存在堆上的,這部分空間除非主動delete,否則時候在程式全部結束時被釋放。所以在區域性的乙個函式中new出來的空間,在主函式中仍然能夠被訪問就是這個原因。

c 函式返回陣列

c 語言 不允許返回乙個完整的陣列作為函式的引數 但是,您 可以通過指定不帶索引的陣列名來返回乙個指向陣列的指標 我們將在下一章中講解有關指標的知識,您可以先跳過本章,等了解了 c 指標的概念之後,再來學習本章的內容。如果您想要從函式返回乙個一維陣列,您必須宣告乙個返回指標的函式,如下 int my...

C 函式返回陣列

int getnewarray 或者採用static定義指標變數 在陣列p count 前面加入了static關鍵字,它就使得p count 存放在記憶體中的靜態儲存區中,所占用的儲存單元不釋放直到整個程式執行結束 for int i 0 i count i printf n for int i 0...

C語言自定義函式如何返回陣列

使用 c 語言,在main 函式中呼叫了乙個自定義的函式,想要從函式中獲取其執行產生的字串,直接返回陣列是實現不了的,最起碼也要返回陣列的位址。但是在自定義函式中建立陣列後,該陣列本身是乙個區域性變數,當該自定義函式的生命週期結束後,區域性變數也就被 了,即使返回了乙個代表陣列的位址,但實際上其指代...