1 minute read

함수 인수에서의 포인터

Call by Value

#include <bits/stdc++.h> 
#define ll long long
using namespace std;

void p(int a)
{
    a = a + 1;
    cout << &a << "\n";
    return;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int a = 5;
    p(a);
    cout << &a << " a의 값= " << a << "\n";
    return 0;
}

출력 결과

p:0000007DEC5CFA60 main: 0000007DEC5CFA84 a의 값= 5

a의 주소가 다릅니다.
p에서 a의 주소가 아닌 a의 값을 복사하여 새로운 공간에 a라는 지역변수를 만들었기 때문입니다.
그렇다면 어떻게 해야 의도한데로 a에 1의 값을 더할 수 있을까요.

Call by Reference

#include <bits/stdc++.h> 
#define ll long long
using namespace std;

void p(int *p)
{
    *p = *p + 1;
    cout << p << "\n";
    return;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int a = 5;
    p(&a);
    cout << "main: " << &a << " a의 값= " << a << "\n";
    return 0;
}

함수에 포인터변수를 선언하고 a의 주소를 넘겨줍니다.
메모리도 아껴줍니다.
다음과 같이도 사용합니다.

#include <bits/stdc++.h> 
#define ll long long
using namespace std;

void p(int &p)
{
    p = p + 1;
    return;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int a = 5;
    p(a);
    cout << "main: " << &a << " a의 값= " << a << "\n";
    return 0;
}

Leave a comment