C 中返回引用和返回值的區別,C 引用返回值 與 返回指標

時間 2021-08-30 09:08:44

1樓:

通常的返回機制將返回值複製到臨時儲存區域中, 隨後呼叫程式將訪問該區域.

返回引用則程式則呼叫程式將直接訪問返回值.

通常引用將指向傳遞給函式的引用, 因此呼叫函式實際上是直接訪問自己的一個變數.

比如const int& fun (int& a, const int& b)

int x = 1, y = 2, z;

z = fun(x, y);

//等價於 fun(x, y); z = x;

而且返回引用不能返回函式內部的臨時變數, 因為該變數隨著函式的結束而銷燬, 返回值會毫無意義, 如

const int& fun (int& a, const int& b)

//該程式會崩潰, 因為變數c隨著程式的結束而銷燬, 繼而返回的c的同名物件毫無意義

2樓:嚴棠偉雨筠

如果返回值,那麼記憶體中只有兩個儲存該整形資料的單元,一個是函式中生成的被返回的整形資料,一個是接收以後的整形資料,而返回引用則只要一格單元來儲存這個整形資料,被返回的和接收到的都是同一個整形資料。

c++ 引用返回值 與 返回指標

3樓:匿名使用者

int * d = &c;

也就是*d就等效於c了啊

也就是return *d;

就等效於

return c;

4樓:匿名使用者

*d是指標d指向的資料,你的寫法中,指標d指向了引用c的位置,其實也就是傳入實參a的地址空間上的資料,故而是一直存在且可以正確返回的。如果你在k()函式內部不是使用傳輸的c(也就是換個變數名,什麼都行),那自然就不可以了,出了這個函式就被釋放了

5樓:匿名使用者

return *d;你返回的是指標d指向的值,並不是返回的指標...return d;才是返回的指標 int*...而你h函式返回值型別是int& 也相當於int 這時候編譯的話c++應該會報錯,因為c++編譯器檢查型別很嚴格 c編譯器裡面雖然沒有引用,int* 返回成int 可能會報警告,因為指標儲存的地址也是一個數..

有的會報錯...

區域性變數是不能返回成引用的...引用的實質相當於給變數弄了個別名,然後通過別名去找這個變數...而區域性變數的記憶體空間在函式結束後就被**了,也就是這個變數不存在了,那麼它的別名還有什麼意義....

C 關於返回值的問題,C 關於返回值的問題

你應該換一個高階一些的 ide 你這樣寫會報錯的 你a函式定義了返回型別為int 而你函式裡的return 後面沒有寫返回值 應該寫return 返回值 我不知道你取什麼結果 return 後面寫什麼你自己考慮吧 這個函式功能上不需要返回值也可以,因為函式體中已經輸出了資料。但函式定義為int型,且...

關於C 函式臨時變數返回值問題

所謂 未定義行為 就是說什麼情況都有可能出現,程式設計師無法確定會發生什麼 如果硬要追究原因的話,p a b 之後又執行了幾次 運算,函式a的引數所佔的記憶體區域早已被其他變數覆蓋,而a b 之後立即訪問返回的地址處的變數,函式a的引數所佔的記憶體區域還沒有被覆蓋,所以能夠得到正確的值 這種東西,測...

C語言可以返回字串嗎?可以的話返回值型別是什麼呢?能否舉個例子。謝謝

劉劉 c語言返回字串有四種方式 1。使用堆空間,返回申請的堆地址,注意釋放2。函式引數傳遞指標,返回該指標3。返回函式內定義的靜態變數 共享 4。返回全域性變數使用分配的記憶體,地址是有效 char fun 但這種方式需要注意,必須由使用將將返回的地址free掉將地址由入參傳入 char fun c...