2016-12-04 58 views
0
void parameterMystery3(int* a, int& b, int* c) { 
    *a += *c; 
    (*c)++; 
    b--; 
    cout << b << " " << *a << " " << *c << end1; 
} 

int main() { 
    int w = -4; 
    int x = 10; 
    int y = 9; 
    int z = 13; 

    parameterMystery3(&x, x, &w); 
} 

如果參數2(在main()的末尾)將x作爲普通變量(而不是指針或引用)傳遞,是否只在parameterMystery3中引用x?如果它們被轉換爲int * a和int * b的指針,或者我錯誤地考慮它,它會在主要事件的末尾執行&?C++如何處理函數中指針和引用的更改?

+1

我敢肯定,這種預期的行爲得到明確指定的地方。但是,個人而言,我更喜歡「醫生,當我用這種方式移動手臂時會感到疼痛 - 好吧,不要那樣移動你的手臂,然後」接近。人生太短... –

+1

'end1'應該是'endl' – Borgleader

回答

1

我個人發現C++參考符號有點令人困惑。

參數聲明中的&表示參數通過引用傳遞。你傳遞x作爲參數。如果您沒有將參數聲明爲參考,則會傳遞一個x值的副本。在您將其聲明爲引用時,會傳遞對x的引用。這意味着,如果更改b值,則x值會更改。

現在,如果使用指針類型聲明參數,則必須提供聲明類型的指針作爲參數。沒有轉換完成。傳遞一個int變量作爲參數是一個編譯時錯誤。您必須傳遞一個int *變量或一個指向該變量的指針。

你得到一個指向變量的指針&。 令人困惑的是,最後的&與參數b中的&不同。而INT & B意指b爲一個int(該參數按引用傳遞)的&你提供作爲參數的意思是「一個指針」變量的變量之前的參考。

因此,如果y是一個int變量,則& y是指向y的int *。

+0

我沒有意識到指針和引用也改變了它引用/指向原來的東西。這現在有道理。謝謝! – AstroBoogie

+0

好吧,如果你修改了一個引用參數,那麼它所引用的值就會被修改。 – Juan

+0

對不起,錯誤發送。如果參數是一個指針類型,那麼一個指針是按值傳遞的。 – Juan