포인터란 메모리의 주소를 가리키는 변수로 32비트 환경에서 4바이트의 크기를 가진다. 포인터는 주소(Address)와 타입(Type)으로 구성되며 특별한 연산자를 사용하여 접근한다.
포인터 연산자
- * (Dereference Operator)
- & (Address of Operator)
포인터를 사용하면 메모리에 접근하는 프로그래밍이 가능하기 때문에 Low-Level 프로그래밍이 가능하게 한다. 하지만 잘못 사용하면 매우 위험한 코드가 된다.
int y = 20;
fun(&x, &y)
void fun(int *x, int *y) {
int temp;
temp = *x;
*x = *y;
*y = temp;
}
변수란 메모리 공간에 붙은 이름이다. 즉, 변수는 메모리가 할당되는 공간에 이름을 붙인 것으로, 레퍼런스 변수는 이 할당된 공간에 이름을 하나 더 추가 시키는 것이다.
int val = 10;
int &ref = val;
아래의 코드를 보자.
#include <iostream>
using std::cout;
using std::endl;
int main() {
int val = 10;
int &rVal = val; // 레퍼런스 선언을 위해 & 연산자를 사용
val++;
cout << "val = " << val << endl;
cout << "ref = " << rVal <<endl;
rVal++;
cout << "val = " << val << endl;
cout << "ref = " << rVal << endl;
cout << "val address = " << &val << endl;
cout << "ref address = " << &rVal << endl;
return 0;
}
[ 위의 코드 결과값 ]
val = 11
ref = 11
val = 12
ref = 12
val address = 0x22ff24
ref address = 0x22ff24
위의 결과처럼 레퍼런스 변수는 같은 메모리 주소를 참조하고 데이터 또한 똑같이 변경할 수 있다. 즉, 레퍼런스 변수는 같은 공간에 할당한 이름을 추가한 것이다.
레퍼런스 변수의 제약
- 선언과 동시에 초기화되어야 한다.
- 이름이 존재하지 않는 대상에 레퍼런스 할 수 없다. ex) int &ref = 10; (x)
'C 언어 개열 > C++ ' 카테고리의 다른 글
C++ 객체지향 기초 (0) | 2010.08.22 |
---|---|
Call by Value 와 Call by Reference (0) | 2010.08.22 |
const 키워드와 메모리 영역 (0) | 2010.08.19 |
using 키워드와 전역변수 접근방법 (0) | 2010.08.19 |
이름공간(Namespace) (0) | 2010.08.19 |