首頁 > 後端開發 > C++ > 為什麼 C/C 中 `changeValue(value)` 不改變 `value` ?

為什麼 C/C 中 `changeValue(value)` 不改變 `value` ?

DDD
發布: 2024-11-16 08:47:03
原創
359 人瀏覽過

Why Does `changeValue(value)` Not Change `value` in C/C  ?

按值調用的難題:解開價值保存之謎

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板