函式返回值

2021-08-28 18:04:16 字數 508 閱讀 5034

一般說來,函式中是可以進行區域性變數的返回的,不然豈不是全部要用全域性變數,如果使用了全域性變數,那還有必要進行返回嗎?那函式就沒有它存在的意義了!但是要注意了,這裡所謂的區域性變數的返回很有內涵,什麼樣的值才可以進行返回而不出錯?

其實,只要遵守一句話即可:函式不能返回指向棧記憶體的指標!

為什麼?因為返回的都是值拷貝!

我們知道,區域性變數的作用域是函式內部,函式一旦執行結束,棧上的區域性變數會進行銷毀,記憶體得到釋放。因此,此時函式返回的是該區域性變數的值拷貝,這是沒有問題的。但是如果返回的是區域性變數的位址,那麼返回的只是該區域性變數指標的拷貝,而隨著函式執行結束,該拷貝指標所指向的棧記憶體已經被釋放,那麼指向乙個未知區域就會導致呼叫的錯誤。

那如果返回的指標指向的是堆記憶體,又會怎麼樣?

這樣的使用是沒有問題的,在函式內new空間,在函式外delete空間。但是這樣並不是一種好的程式設計風格,盡量在同乙個作用域內進行new和delete操作,否則還要呼叫者手動進行記憶體的釋放,試問這樣的介面是不是很爛。如果確實需要這樣做,那就傳指標進去吧!

函式返回值

這裡接著探求被調函式的返回值是如何傳遞到主調函式中的,下面為c程式。add函式通過直接返回a b的,而add1函式先定義乙個區域性變數c,儲存a b的值,然後再返回c的值。其中a b可以當成乙個臨時變數,其結果是暫時存放在暫存器中的 eax 參照反匯程式設計序,可以看出函式的值並不是通過壓棧 基址定...

函式返回值

現實生活中的場景 我給兒子10塊錢,讓他給我買包菸。這個例子中,10塊錢是我給兒子的,就相當於呼叫函式時傳遞到引數,讓兒子買菸這個事情最終的目標是,讓他把煙給你帶回來然後給你對麼,此時煙就是返回值 開發中的場景 定義了乙個函式,完成了獲取室內溫度,想一想是不是應該把這個結果給呼叫者,只有呼叫者擁有了...

函式返回值

一 返回值 def email print 我要發郵件 return 123 如果沒有返回值,預設返回none ret email print ret 如果函式執行成功,return後面是什麼值,ret等於返回值,就輸出什麼值 二 傳入引數,驗證手機號碼取快遞def kuaidi p if p 15...