簡體   English   中英

通過引用和指針傳遞參數

[英]Passing arguments by reference and pointers

我來自C語言,據我了解,如果將參數傳遞給函數,則只會使用其值復制它,因此,如果更改此變量值,傳遞給函數的變量將不會之所以進行更改,是因為它們顯然是2個不同的變量,具有2個不同的地址,並且具有相同的值。 因此,在C語言中,如果我們想更改要傳遞給函數的參數,則可以傳遞帶有參數地址的指針。

現在,在c ++中,我們可以做同樣的事情,但是我們也可以這樣做:

void changeValue(int& n)
{
    n = 10;
}

不僅我們沒有取消引用分配值,而且當我們將變量傳遞給函數時,我們仍按原樣傳遞它而沒有地址(&)運算符。 所以我不明白這里有什么區別? 如果我們不取消引用,它甚至是指針嗎? 另外,如果我們不帶&運算符原樣傳遞它,那么如何通過引用傳遞它呢? 有人可以幫我清除一些東西嗎?

C ++具有指針(以保持與C的向后兼容性)和引用。 如前所述,使用指針時,您正在處理地址,解引用運算符等。使用C ++引用時,您不必擔心,因為引用是另一個變量的別名。 也就是說,對參考的任何修改都將反映在實際變量中。

引用可以由編譯器實現為指針,但不是必需的。

當您想重載運算符時,引用確實會發光。 例如,如果構造一個自定義數字類型來表示矩陣,則可以創建一個加法運算符,例如

matrix operator + (matrix m1, matrix m2);

但這將導致大量復制。 您可以使用指針:

matrix operator + (matrix* m1, matrix* m2);

但是然后調用代碼確實很丑陋:

matrix m = &m1 + &m2;

引用使我們能夠以避免復制的方式來寫操作符,並允許我們在調用站點上干凈地使用它而無需到達操作符的地址。

因此,總而言之:C ++中的引用與指針相似,因為它們允許您通過多個變量引用相同的值。 但是,與需要使用內存地址的指針不同,引用是一種語法上的便利,其實際實現取決於編譯器。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM