C/C++ 함수 인수에서의 포인터
함수 인수에서의 포인터
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