산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

참조에 의한 C++ 호출:포인터 사용 [예제 포함]

참조에 의한 C++ 호출:포인터 사용 [예제 포함]

이 튜토리얼에서는 예제의 도움으로 함수에 대한 인수로 포인터를 전달하기 위한 참조에 의한 C++ 호출에 대해 배울 것입니다.

C++ 함수 자습서에서 함수에 인수를 전달하는 방법을 배웠습니다. 실제 값이 전달되기 때문에 이 방법을 값에 의한 전달이라고 합니다.

그러나 인수의 실제 값이 전달되지 않는 함수에 인수를 전달하는 또 다른 방법이 있습니다. 대신 값에 대한 참조가 전달됩니다.

예를 들어,

// function that takes value as parameter

void func1(int numVal) {
    // code
}

// function that takes reference as parameter
// notice the & before the parameter
void func2(int &numRef) {
    // code
}

int main() {
    int num = 5;

    // pass by value
    func1(num);

    // pass by reference
    func2(num);

    return 0;
}

& 주목 void func2(int &numRef)에서 . 이것은 변수의 주소를 매개변수로 사용하고 있음을 나타냅니다.

따라서 func2()을 호출하면 main()의 기능 변수 num 전달 인수로 실제로 num의 주소를 전달하고 있습니다. 값 대신 변수 5 .

<그림> <시간>

예제 1:포인터 없이 참조로 전달

#include <iostream>
using namespace std;

// function definition to swap values
void swap(int &n1, int &n2) {
    int temp;
    temp = n1;
    n1 = n2;
    n2 = temp;
}

int main()
{

    // initialize variables
    int a = 1, b = 2;

    cout << "Before swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    // call function to swap numbers
    swap(a, b);

    cout << "\nAfter swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    return 0;
}

출력

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

이 프로그램에서 변수 a를 전달했습니다. 및 b swap()으로 기능. 함수 정의를 확인하세요.

void swap(int &n1, int &n2)

여기에서는 &을 사용하고 있습니다. 함수가 주소를 매개변수로 받아들일 것임을 나타냅니다.

따라서 컴파일러는 실제 값 대신 변수의 참조가 함수 매개변수로 전달됨을 식별할 수 있습니다.

swap()에서 함수, 함수 매개변수 n1n2 변수 a와 동일한 값을 가리키고 있습니다. 및 b 각기. 따라서 스와핑은 실제 값에서 발생합니다.

포인터를 사용하여 동일한 작업을 수행할 수 있습니다. 포인터에 대해 알아보려면 C++ 포인터를 방문하십시오.

<시간>

예제 2:포인터를 사용하여 참조로 전달

#include <iostream>
using namespace std;

// function prototype with pointer as parameters
void swap(int*, int*);

int main()
{

    // initialize variables
    int a = 1, b = 2;

    cout << "Before swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;

    // call function by passing variable addresses
    swap(&a, &b);

    cout << "\nAfter swapping" << endl;
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    return 0;
}

// function definition to swap numbers
void swap(int* n1, int* n2) {
    int temp;
    temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

출력

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

여기에서 출력이 이전 예제와 동일한 것을 볼 수 있습니다. 줄을 주목하십시오.

// &a is address of a
// &b is address of b
swap(&a, &b);

여기서 변수의 주소는 변수가 아닌 함수 호출 시 전달됩니다.

값 대신 주소가 전달되므로 역참조 연산자 * 해당 주소에 저장된 값에 액세스하는 데 사용해야 합니다.

temp = *n1;
*n1 = *n2;
*n2 = temp;

*n1*n2 주소 n1에 저장된 값을 제공합니다. 및 n2 각각.

n1 이후 및 n2 a의 주소를 포함 및 b , 모든 작업이 *n1에 수행됩니다. 및 *n2 a의 실제 값을 변경합니다. 및 b .

따라서 a 값을 출력할 때 및 b main() 기능을 사용하면 값이 변경됩니다.


C 언어

  1. C# 사용
  2. C++ 연산자
  3. C++ 주석
  4. C++ 클래스 템플릿
  5. C 포인터
  6. 예제가 있는 C++ 포인터
  7. 2021년 맬웨어의 13가지 유형 [예제 포함]
  8. 5가지 유형의 데이터 센터 [예제 포함]
  9. 2021년의 8가지 기술 유형 [예제 포함]
  10. C - 포인터