강의 정리/인프런
[인프런] 매개변수 전달 살펴보기
program-yam
2025. 3. 11. 16:19
주소에 의한 전달과 참조에 의한 전달의 코드를 살펴보자.
📌 주소에 의한 전달
#include<stdio.h>
void swap(int *pA, int *pB)
{
int nTmp = *pA;
*pA = *pB;
*pB = nTmp;
return;
}
int main(void)
{
int x = 3, y = 4;
swap(&x, &y);
printf("%d, %d\n", x, y);
return 0;
}
📌 참조에 의한 전달
#include<iostream>
using namespace std;
void swap(int& pA, int& pB)
{
int temp = pA;
pA = pB;
pB = temp;
return;
}
int main(void)
{
int a = 10;
int b = 20;
swap(a, b);
cout << "a = " << a << ", b = " << b << endl;
return 0;
}
주소에 의한 전달은 c로 작성했고, 참조에 의한 전달은 c++로 작성했다.
실제 어셈블리로 매개변수가 전달되는 부분을 확인하면 어떤 모습일까?
어셈블리 수준에서 두 코드를 보면 똑같이 ptr 즉, 주소로 접근해서 데이터를 처리하는 것을 확인할 수 있다.
이처럼 주소에 의한 전달과 참조에 의한 전달은 모두 주소를 이용해서 데이터를 처리하는 것이므로 차이가 없다.
어떤 의미에서는 포인터가 c++ 이나 JAVA에서 참조자가 되어주는 것이라고도 볼 수 있겠다.