按值調用的難題:解開價值保存之謎
在C/C 中,函數參數本質上是按值傳遞的。這意味著原始變數的副本被傳遞給函數,而不是原始變數本身。此行為可能會導致混亂,如以下程式碼片段所示:
void changeValue(int value) { value = 6; } int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
執行此程式碼後,人們可能會期望輸出為「The value is: 6」。在函數呼叫之後。然而,令人驚訝的是,輸出仍然是“The value is: 5”。造成這種行為的原因在於按值呼叫的複雜性。
呼叫函數changeValue() 時,會建立值5 的副本並將其傳遞給該函數。這意味著在函數內,值 6 被指派給副本,而原始值 5 保持不變。
要修正此問題並修改原始變量,必須訴諸引用呼叫。該技術涉及將對原始變數的引用傳遞給函數。在這種情況下,函數可以修改原始值,反映呼叫函數中的變更。
void changeValue(int& value) { value = 6; } int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
現在,執行程式碼後,輸出將是「The value is: 6」。這突顯了按值呼叫和按引用呼叫之間的區別,以及根據程式的預期行為選擇合適的呼叫的重要性。
以上是為什麼 C/C 中 `changeValue(value)` 不改變 `value` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!