C++ 주소에 의한 호출 및 참조에 의한 호출

C Call Address



C++는 유연한 범용 프로그래밍 언어입니다. 에 의해 원래 만들어졌습니다. Bjarne Stroustrup, 덴마크 컴퓨터 과학자, 1985년. C++는 3개 매개변수 전달 방법, 즉 값에 의한 호출, 주소에 의한 호출 및 참조에 의한 호출을 지원합니다. 이 기사에서는 주소에 의한 호출과 참조에 의한 호출 메커니즘에 대해 논의할 것입니다.

기능이란 무엇입니까?

실제 주제로 넘어가기 전에 C++에서 함수가 무엇인지 이해해야 합니다. 많은 분들이 이미 기능에 익숙할 것입니다.







함수는 기본적으로 특정 작업을 수행하는 데 사용할 수 있는 코드 조각입니다. 함수는 주로 C++ 프로그램에서 반복적인 코드를 줄이는 데 사용됩니다. 입력을 매개변수로 사용하고 출력을 반환 값으로 반환합니다. 함수를 한 번 정의하면 프로그램 후반부에서 여러 번 호출/사용할 수 있습니다. 그렇게 하면 프로그램에서 반복적인 코드를 많이 절약할 수 있습니다.



모든 C++ 프로그램에는 main() 함수가 있어야 합니다. main() 함수는 C++ 프로그램의 진입점입니다. main() 함수 외에도 프로그래머는 원하는 만큼 함수를 정의할 수 있습니다.



다음은 함수를 정의하는 구문입니다.





반환 유형 함수 이름(입력 매개변수 목록)

C++의 함수는 0개 이상의 입력 매개변수를 허용할 수 있지만 반환 값은 하나만 반환할 수 있습니다.

주소란?

C++에는 데이터 변수와 주소 변수의 두 가지 유형의 변수가 있습니다(C 언어와 유사). 주소 변수는 다른 데이터 변수의 주소를 저장하는 데 사용됩니다. 예를 들어 다음 코드 스니펫을 살펴보겠습니다.



정수NS= 100;
정수 *ptr= &NS;

여기서 첫 번째 명령문은 변수 i가 데이터 변수이며 값 100을 저장하고 있음을 알려줍니다. 두 번째 명령문에서는 포인터 변수, 즉 ptr을 선언하고 변수 i의 주소로 초기화합니다.

참조란 무엇입니까?

참조는 C++ 언어의 또 다른 강력한 기능입니다. 다음 코드 스니펫을 고려해 보겠습니다.

정수에게= 200;
정수 &NS=에게;

이 예에서는 정수, 즉 a를 선언한 다음 a 값으로 초기화되는 참조 변수 r을 선언했습니다. 따라서 참조 변수는 다른 변수의 별칭일 뿐입니다.

매개변수 전달 방법:

C++ 언어에는 세 가지 유형의 매개변수 전달 메소드가 있습니다.

  1. 값에 의한 호출 / 값에 의한 전달
  2. 주소로 전화 / 주소로 전달
  3. 참조로 호출 / 참조로 전달

이 기사에서는 – Call by address 및 Call by reference에 대해 논의합니다.

주소로 전화 걸기/주소로 전달이란 무엇입니까?

Call by address / Pass by address 방식의 경우 함수 인수는 주소로 전달됩니다. 호출자 함수는 매개변수의 주소를 전달합니다. 포인터 변수는 함수 정의에 사용됩니다. Call by address 메소드의 도움으로 함수는 실제 매개변수에 액세스하여 수정할 수 있습니다. 이 기사의 뒷부분에 있는 Call by address 메소드의 예를 볼 것입니다.

참조에 의한 호출/참조에 의한 전달이란 무엇입니까?

참조에 의한 호출/참조에 의한 전달 방법에서 함수 매개변수는 참조로 전달됩니다. 함수 정의 내에서 실제 매개변수는 참조 변수를 사용하여 액세스합니다.

예:

이제 매개변수 전달 방법의 개념을 이해했으므로 C++에서 매개변수 전달 메커니즘을 이해하기 위한 몇 가지 예제 프로그램을 볼 것입니다.

  1. 예-1 – 주소로 호출 (1)
  2. 예-2 – 주소로 호출 (2)
  3. 예-3 – 참조에 의한 호출 (1)
  4. 예-4 – 참조에 의한 호출 (2)

처음 두 가지 예는 C++에서 주소별 호출 방법이 작동하는 방식을 설명하기 위해 제공됩니다. 마지막 두 예는 Call by reference 개념을 설명하기 위한 것입니다.

예-1 – 주소로 호출 (1)

이 예에서는 주소에 의한 호출 메커니즘을 시연할 것입니다. main() 함수에서 hello() 함수를 호출하고 var의 주소를 전달합니다. 함수 정의에서 포인터 변수, 즉 p에서 var의 주소를 받습니다. 함수 hello 내에서 var 값은 포인터의 도움으로 200으로 변경됩니다. 따라서 hello() 함수 호출 후 main() 함수 내부에서 var의 값이 200으로 변경됩니다.

#포함하다
사용 네임스페이스시간;

무효의안녕하십니까(정수 *NS)
{
비용 <<<< '안녕하세요() 함수 내부 : ' <<;
비용 << '*p의 값 = ' << *NS<<;
*NS= 200;
비용 << '*p의 값 = ' << *NS<<;
비용 << 'hello() 함수를 종료합니다.' <<;
}

정수기본()
{
정수어디= 100;
비용 << 'main() 함수 내부의 var 값 = ' <<어디<<;

안녕하십니까(&어디);

비용 <<<< 'main() 함수 내부의 var 값 = ' <<어디<<;

반품 0;
}

예-2 – 주소로 호출 (2)

이것은 주소에 의한 호출 방법의 또 다른 예입니다. 이 예에서는 실제 문제를 해결하기 위해 주소에 의한 호출 방법을 사용할 수 있는 방법을 설명합니다. 예를 들어, 두 변수를 교환하는 함수를 작성하려고 합니다. 값에 의한 호출 메커니즘을 사용하여 두 변수를 교환하면 호출자 함수에서 실제 변수가 교환되지 않습니다. 이러한 시나리오에서는 주소별 호출 방법을 사용할 수 있습니다. 이 예에서는 var_1(&var_1) 및 var_2(&var_2)의 주소를 mySwap() 함수에 전달합니다. mySwap() 함수 내에서 포인터의 도움으로 이 두 변수의 값을 교환합니다. 아래 출력에서 ​​볼 수 있듯이 이러한 변수의 실제 값은 mySwap() 함수가 실행된 후 main() 함수에서 스왑됩니다.

#포함하다
사용 네임스페이스시간;

무효의마이스왑(정수 *vptr_1,정수 *vptr_2)
{
정수임시 변수;
임시 변수= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=임시 변수;
}

정수기본()
{
정수var_1= 100;
정수var_2= 300;

비용 << 'mySwap() 함수를 호출하기 전에 var_1의 값: ' <<var_1<<;
비용 << 'mySwap() 함수를 호출하기 전에 var_2의 값: ' <<var_2<<<<;

비용 << 'mySwap() 함수 호출 - 주소로 호출.' <<<<;
마이스왑(&var_1,&var_2);

비용 << 'mySwap() 함수 호출 후 var_1의 값 : ' <<var_1<<;
비용 << 'mySwap() 함수 호출 후 var_2 값 : ' <<var_2<<;

반품 0;
}

예-3 – 참조에 의한 호출 (1)

이 예에서는 C++에서 참조에 의한 호출이 작동하는 방식을 보여줍니다. hello() 함수 정의에서 값은 참조 변수(&p)로 수신됩니다. 참조 변수(즉, p)의 도움으로 main() 함수 내부의 실제 매개변수(var) 값을 변경할 수 있습니다.

#포함하다
사용 네임스페이스시간;

무효의안녕하십니까(정수 &NS)
{
비용 <<<< '안녕하세요() 함수 내부 : ' <<;
비용 << 'p의 값 = ' <<NS<<;
NS= 200;
비용 << 'p의 값 = ' <<NS<<;
비용 << 'hello() 함수를 종료합니다.' <<;
}

정수기본()
{
정수어디= 100;
비용 << 'main() 함수 내부의 var 값 = ' <<어디<<;

안녕하십니까(어디);

비용 <<<< 'main() 함수 내부의 var 값 = ' <<어디<<;

반품 0;
}

예-4 – 참조에 의한 호출(2)

이것은 참조에 의한 호출의 또 다른 예입니다. 이 예제에서는 실제 예제를 사용하여 C++에서 참조에 의한 호출이 작동하는 방식을 보여 줄 것입니다. mySwap() 함수는 var_1 및 var_2 매개변수를 사용하여 main() 함수에서 호출됩니다. mySwap() 함수 내에서 매개변수를 참조 변수로 받습니다.

#포함하다
사용 네임스페이스시간;

무효의마이스왑(정수 &vref_1,정수 &vref_2)
{
정수임시 변수;
임시 변수=vref_1;
vref_1=vref_2;
vref_2=임시 변수;
}

정수기본()
{
정수var_1= 100;
정수var_2= 300;

비용 << 'mySwap() 함수를 호출하기 전에 var_1의 값: ' <<var_1<<;
비용 << 'mySwap() 함수를 호출하기 전에 var_2의 값: ' <<var_2<<<<;

비용 << 'mySwap() 함수 호출 - 참조로 호출합니다.' <<<<;
마이스왑(var_1, var_2);

비용 << 'mySwap() 함수 호출 후 var_1의 값 : ' <<var_1<<;
비용 << 'mySwap() 함수 호출 후 var_2 값 : ' <<var_2<<;

반품 0;
}

결론

매개변수 전달 방법 이해 C++ 매우 중요합니다. C 프로그래밍 언어는 값에 의한 호출과 주소에 의한 호출만 지원합니다. 그러나 C++는 이전 두 메커니즘과 함께 참조에 의한 호출을 지원합니다. 이 기사에서는 Call by address와 Call by reference의 개념을 이해하기 위한 몇 가지 작업 예제를 보았습니다. 주소로 호출은 임베디드 도메인 응용 프로그램에서 매우 강력하고 널리 사용되는 방법입니다.