주소에 의한 전달과 참조에 의한 전달의 코드를 살펴보자.
📌 주소에 의한 전달
#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에서 참조자가 되어주는 것이라고도 볼 수 있겠다.
'강의 정리 > 인프런' 카테고리의 다른 글
[인프런] 형한정어와 컴파일러 최적화 (0) | 2025.03.11 |
---|---|
[인프런] 함수 호출 규약 (0) | 2025.03.11 |
[인프런] 매개변수 전달 기법 (0) | 2025.03.11 |
[인프런] Stack overflow ( 스택 오버플로우 ) (0) | 2025.03.10 |
[인프런] 함수 호출 관계 (0) | 2025.03.10 |