C語言函式如何正確返回陣列?

2022-06-06 18:09:17 字數 1385 閱讀 7827

#includeint* function()

int main()

程式執行結果

接著把注釋掉的那段**取消注釋

程式執行結果

難道就因為加了一句話,就出錯?可是我除了輸出啥也沒幹啊!

實際上我們返回陣列的方法是錯誤的,問題的根源在於:我們在function函式中,定義區域性變數a,返回的是a的位址,而a是乙個區域性變數,當函式呼叫結束時,區域性變數中資料可能已經不復存在了。

#includeint* function(int* a)

int main()

為什麼這樣就可以了呢?事實上,我們先在主函式中宣告了a,相當於已經分配了一塊固定的記憶體,然後將其位址傳入,經過一番操作,再將位址返回,a的內容依舊還是那塊記憶體,不會像之前那樣作為區域性變數被撤回。

靜態陣列的生命週期貫穿整個程式,所以我們可以在函式內部建立乙個靜態區域性陣列,操作後再返回,這種方式陣列的長度必須是函式內確定的。

#includeint* function()

int main()

陣列包裹在結構體裡面,然後返回結構體的乙個例項。

因為結構體成員使用的是深拷貝(deep copy),所以這個方法能夠有效。

習題 8.3 輸入10個整數,將其中最小的數與第乙個數對換,把最大的數與最後乙個數對換。寫3個函式:1.輸入10個整數;2.進行處理;3.輸出10個數。

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

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

c 函式如何返回多值,返回陣列的函式該如何呼叫

1 函式如何返回多值 將需要返回的多值儲存在乙個陣列儲存中,函式返回乙個陣列即可 常用的方法是 宣告乙個返回指標的函式 int pp point int max a 0 int min a 0 for int i 0 i 10 i int aa 2 將max min儲存在aa陣列中 return a...

c語言函式的陣列返回和指標返回

函式內的陣列和指標都是屬於函式棧空間。如果把陣列或指標返回給外部指標,會發生什麼?1先看看第一種,返回陣列 2看看返回指標的情況 include stdio.h char get c int main int argc,char const ar 這個陣列了,系統或者任務會主動的修改裡面的資料,導致...