C C 返回值的分析

2021-10-03 11:51:29 字數 585 閱讀 6941

寫c/c++**,需要接收函式返回值的時候需要注意兩點:

1. 在呼叫函式中給要接收結果的變數分配好空間(堆或棧均可),然後該變數以引用或者指標的形式傳遞給被呼叫函式來接收結果。

2. 在呼叫函式中只是定義乙個指標來接收函式返回值,那麼在被呼叫函式中需要確保這個接收返回值的變數的記憶體空間是在堆上面而不能是在棧上面。這樣可以保證返回結果的正確性。如果返回值的記憶體空間是在棧上面,那麼這個值在函式呼叫結束後很可能會發生變化(被系統**或被覆蓋)。

3. 可以在呼叫函式中使用棧上的變數來接收被呼叫函式的返回值(被呼叫的函式返回的變數是分配在棧空間上的),這種情況下在函式呼叫結束後,被呼叫函式的返回值會全部拷貝到呼叫函式的接收變數裡面。也即有一次記憶體拷貝,對於返回值是複雜的資料結構不建議使用這種方式。

struct j794_message_node* testint()

int main()

上面的**在vs2019中我執行後的結果如下:

length = 13

length = 26274

可以看到第一次的結果正常,第二次的結果已經傳送了錯誤。說明在第二次呼叫printf的時候,被呼叫函式的棧空間的內容已經發生了變化。

C C 函式返回值問題

函式返回值問題 在c c 中 內建型別 char short int long float double 結構體型別 聯合體型別union 列舉型別enum 函式返回值分為三種情況 1.函式返回值小於等於4位元組時,返回值由eax暫存器帶回。2.函式返回值大於4位元組小於等於時,返回值是由eax和e...

C C 程式設計 獲取執行緒的返回值

1 在主線程中建立std promise物件 std promise int promiseobj 上面定義的promise物件還沒有任何關聯的值。但是它承諾某個執行緒將會設定與其關聯的值,並且,當值被設定以後,可以通過與promise關聯的std future物件來獲取該值。假設我們的主線程將建立...

C C 自定義函式 返回值

根據返回值型別來定義為int,並且在子函式結尾一定要寫上return result 需要返回的值 int main中需要定義乙個新的變數去接收子函式返回的值 全域性變數的生命期是永恆的,如果返回乙個區域性變數的位址會出現問題 變數在子函式中或者在if語句後出現都會隨著程式的執行時變數失效 inclu...