주소에 의한 전달과 참조에 의한 전달의 코드를 살펴보자.

 

📌 주소에 의한 전달

#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++로 작성했다.

실제 어셈블리로 매개변수가 전달되는 부분을 확인하면 어떤 모습일까?

 

c 주소에 의한 매개변수 전달

 

c++ 참조에 의한 매개변수 전달

 

어셈블리 수준에서 두 코드를 보면 똑같이 ptr 즉, 주소로 접근해서 데이터를 처리하는 것을 확인할 수 있다.

이처럼 주소에 의한 전달과 참조에 의한 전달은 모두 주소를 이용해서 데이터를 처리하는 것이므로 차이가 없다.

 

어떤 의미에서는 포인터가 c++ 이나 JAVA에서 참조자가 되어주는 것이라고도 볼 수 있겠다.

+ Recent posts