首頁  >  文章  >  後端開發  >  為什麼按值呼叫不修改原始變數?

為什麼按值呼叫不修改原始變數?

DDD
DDD原創
2024-11-21 18:43:13788瀏覽

Why Doesn't Call-by-Value Modify the Original Variable?

以值呼叫:了解限制

考慮這個以值呼叫範例,我們嘗試修改輸入的值函數內的參數:

#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 &amp;value);

透過在函數簽章中使用 &,我們建立原始變數的參考(別名)。對引用所做的任何更改也會修改原始變數。

傳遞參考範例

void changeValue(int &amp;value)
{
  value = 6;
}

現在,當我們在main() 中呼叫changeValue 時,對值的引用被傳遞給函數,允許它修改原始值:

int main()
{
  int value = 5;
  changeValue(value);

  cout << "The value is : " << value << "." << endl;

  return 0;
}

在這種情況下,輸出正確反映修改後的值:6.

以上是為什麼按值呼叫不修改原始變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn