> 백엔드 개발 > C++ > 값별 호출이 원래 변수를 수정하지 않는 이유는 무엇입니까?

값별 호출이 원래 변수를 수정하지 않는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-21 18:43:13
원래의
833명이 탐색했습니다.

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로 유지됩니다. to 6. 이 동작은 C/C의 call-by-value의 기본 원칙에서 비롯됩니다.

The Essence of Call-by-Value

In call- 값으로, 원래 변수의 복사본이 함수에 인수로 전달됩니다. 함수 내에서 이 복사본에 대한 모든 수정 사항은 해당 로컬 범위에만 국한되며 원래 변수에는 영향을 주지 않습니다.

이 예에서 함수changeValue는 main()에서 값 복사본을 받습니다. 이 복사본에 대한 변경 사항은 원래 값 변수에 영향을 주지 않습니다.

해결책: 참조별 전달

함수 내에서 원래 변수를 수정하려면, 우리는 참조에 의한 전달을 사용해야 합니다. C/C에서 이는 다음과 같이 표시됩니다.

void changeValue(int &amp;value);
로그인 후 복사

함수 서명에 &를 사용하여 원래 변수에 대한 참조(별칭)를 만듭니다. 참조에 대한 모든 변경 사항은 원래 변수도 수정합니다.

Pass-by-Reference 예제

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿