>  기사  >  백엔드 개발  >  ## C: 인수를 값으로 전달해야 할 때와 참조로 전달해야 하는 경우는 언제인가요?

## C: 인수를 값으로 전달해야 할 때와 참조로 전달해야 하는 경우는 언제인가요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-30 21:44:02879검색

##  C  : When Should You Pass Arguments by Value vs. by Reference?

C: 인수 전달 "값 기준"과 "참조 기준"의 차이점

C에서 매개변수와 매개변수 간의 상호작용 인수는 매개변수의 유형에 따라 결정됩니다. 값 전달이 일반적이지만 참조 전달은 특정 시나리오에서 뚜렷한 이점을 제공합니다.

참조 전달의 이유

참조 전달은 두 가지 주요 목적으로 사용됩니다.

  • 인수 값 수정: 참조 매개변수를 사용하면 함수가 인수 값을 수정할 수 있습니다. 대조적으로, 값 매개변수는 인수의 복사본을 생성하여 모든 변경 사항을 함수 내에서 격리시킵니다.
  • 성능 향상: 참조로 전달하면 객체를 함수에 복사할 필요가 없으므로 특히 크거나 복잡한 개체의 경우 성능을 향상시킵니다.

예: 인수 값 수정

다음 기능을 고려하세요.

<code class="cpp">void get5and6(int *f, int *s)
{
    *f = 5;
    *s = 6;
}</code>

여기서 포인터는 참조로 인수를 전달하는 데 사용됩니다. 다음을 사용하여 함수를 호출하면

<code class="cpp">int f = 0, s = 0;
get5and6(&f, &s);</code>

f와 s는 각각 5와 6으로 설정됩니다. 함수가 참조가 가리키는 값을 수정하기 때문입니다.

또는 참조를 사용하여 직접 동일한 결과가 나옵니다.

<code class="cpp">void get5and6(int &f, int &s)
{
    f = 5;
    s = 6;
}</code>

다음을 사용하여 함수를 호출하면

<code class="cpp">int f = 0, s = 0;
get5and6(f, s);</code>

동일한 효과가 나타납니다.

예: 성능 최적화

게임 상태를 저장하는 함수를 생각해 보세요.

<code class="cpp">void SaveGame(GameState& gameState)
{
    gameState.update();
    gameState.saveToFile("save.sav");
}</code>

참조 전달이 없으면 GameState 개체의 복사본이 함수 내부에 생성되어 잠재적으로 상당한 리소스를 소비하게 됩니다. 참조로 전달하면 객체의 주소만 복사되므로 큰 내용을 복사하는 오버헤드가 발생하지 않습니다.

참조를 사용하는 경우

참조 전달은 다음과 같은 경우에 유리합니다. :

  • 전달된 개체가 크거나 복잡합니다.
  • 함수가 자주 호출됩니다(예: 루프에서).

Const 참조

Const 참조는 인수가 함수 내에서 수정될 수 없도록 보장합니다. 특정 매개변수에 대한 읽기 전용 액세스를 강제하는 데 사용됩니다.

위 내용은 ## C: 인수를 값으로 전달해야 할 때와 참조로 전달해야 하는 경우는 언제인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.