c 中引用符 的問題

2021-08-18 18:42:22 字數 753 閱讀 8843

今天在刷劍指offer時,碰到乙個傳參的問題。

voidprintlist(vectorint> > &result,

intbegin,

intend)

在這個函式中,對於vector容器的result變數,不加&時,執行測試用例會出錯。

也就是碰到了值傳遞和引用傳遞的問題,對此稍微查閱了一些其他的資料。

值傳遞:

形參是實參的拷貝,改變形參的值並不會影響外部實參的值。從被呼叫函式的角度來說,值傳遞是單向的(實參->形參),引數的值只能傳入,不能傳出。當函式內部需要修改引數,並且不希望這個改變影響呼叫者時,採用值傳遞。

引用傳遞:

形參相當於是實參的「別名」,對形參的操作其實就是對實參的操作,在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開闢了記憶體空間,但是這時存放的是由主調函式放進來的實參變數的位址。被調函式對形參的任何操作都被處理成間接定址,即通過棧中存放的位址訪問主調函式中的實參變數。正因為如此,被調函式對形參做的任何操作都影響了主調函式中的實參變數。

當大型物件被傳遞給函式時,使用引用引數可使引數傳遞效率得到提高,因為引用並不產生物件的副本,也就是引數傳遞時,物件無須複製。

通過以上的對比就可以知道問題發生的原因了,這些小問題在跑程式的時候就會顯現出來,還需要加強學習啊!

C 中的引用問題

同樣的c 中的引用也是非常容易搞混的一節內容 這裡我自己做個總結給以後不熟悉引用的那個我複習 1.指標與引用的區別 2.引用的用途 c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。當呼叫函式時,有三種向函式傳遞引數的方式 i.傳值呼叫 該方法把引數的實際值複製給函式的形式引...

c 中的引用問題2

此處介紹另外一種編譯的方式。首先建立乙個從檔案d.cs using system namespace superdont 其次建立乙個主檔案c.bs,引用從檔案的命名空間中的類的方法。using system using superdont namespace lilizong 在編譯過程中,選擇將...

C 中引用與位址運算子( )

在c 中,這個符號有兩個含義,一種含義是取某個變數或者物件的位址。這個位址是指記憶體位址,這個位址取 到之後,可以賦給乙個指標。例如下面這樣 int a 5 int p a 這就表示,有乙個變數為a,其值為5,然後有乙個指標變數p,它儲存了變數a的位址。但c 中,還有乙個用途是定義引用常量。引用其實...