void swap(int *x, int *y)
포인터는 변수의 주소가 파라미터로 전달된다.
void swap(int& x, int& y)
참조자는 변수의 Alias가 파라미터로 전달된다. Alias와 파라미터의 주소는 동일하다.
따라서, 참조자의 값 변경시 전달된 변수의 값 또한 바뀐다.
차이점)
1. 포인터는 재 할당될 수 있지만, 참조자는 초기화시에 할당되고 재 할당이 안된다.
2. 참조자는 NULL 값을 할당 받을 수 없다. 포인터는 가능하다.
3. 포인터++은 메모리 이동이고, 참조자++은 값 1 증가이다
4. 포인터 변수의 주소와 변수 주소는 서로 다르지만, 참조자 주소와 변수 주소는 서로 동일하다.
5. 포인터는 ->로 멤버에 접근하고, 참조자는 . 로 멤버에 접근한다.
6. 포인터는 *로 역참조가 가능하다. 반면, 참조자는 그 자체로 참조한다.
// C++ program to demonstrate differences
// between pointer and reference
#include <iostream>
using namespace std;
struct demo {
int a;
};
int main()
{
int x = 5;
int y = 6;
demo d;
int* p;
p = &x;
p = &y; // 1. Pointer reintialization allowed
int& r = x;
// &r = y; // 1. Compile Error
r = y; // 1. x value becomes 6
p = NULL;
// &r = NULL; // 2. Compile Error
// 3. Points to next memory location
p++;
// 3. x values becomes 7
r++;
cout << &p << " " << &x << '\n'; // 4. Different address
cout << &r << " " << &x << '\n'; // 4. Same address
demo* q = &d;
demo& qq = d;
q->a = 8;
// q.a = 8; // 5. Compile Error
qq.a = 8;
// qq->a = 8; // 5. Compile Error
// 6. Prints the address
cout << p << '\n';
// 6. Print the value of x
cout << r << '\n';
return 0;
}
0x7ffc7ed95828 0x7ffc7ed95820
0x7ffc7ed95820 0x7ffc7ed95820
0x4
7
참고
- Passing By Pointer Vs Passing By Reference in C++ - GeeksforGeeks
반응형
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
std::nothrow (0) | 2022.07.29 |
---|---|
fstream 처음 위치로 옮겨서 덮어쓰기 (0) | 2022.02.27 |
C++ 파일 입출력 정리 (1) | 2022.02.14 |
Unit testing 이란 (0) | 2022.02.13 |
void 포인터 용법 정리 (0) | 2021.08.26 |