以值呼叫:了解限制
考慮這個以值呼叫範例,我們嘗試修改輸入的值函數內的參數:
#include <iostream> using namespace std; void changeValue(int value); int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; } void changeValue(int value) { value = 6; }
令人驚訝的是,儘管我們努力改變,輸出仍然是5到6. 這種行為源自於C/C中按值調用的基本原理。
按值呼叫的本質
呼叫中按值,原始變數的副本作為參數傳遞給函數。函數內對此副本所做的任何修改都僅限於該局部範圍,且不會影響原始變數。
在我們的範例中,函數 changeValue 從 main() 接收值的副本。對此副本所做的任何變更都不會影響原始值變數。
解:依引用傳遞
要從函數內修改原始變數,我們必須採用參考傳遞。在 C/C 中,這表示如下:
void changeValue(int &value);
透過在函數簽章中使用 &,我們建立原始變數的參考(別名)。對引用所做的任何更改也會修改原始變數。
傳遞參考範例
void changeValue(int &value) { value = 6; }
現在,當我們在main() 中呼叫changeValue 時,對值的引用被傳遞給函數,允許它修改原始值:
int main() { int value = 5; changeValue(value); cout << "The value is : " << value << "." << endl; return 0; }
在這種情況下,輸出正確反映修改後的值:6.
以上是為什麼按值呼叫不修改原始變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!