< 포인터 (pointer) >
&변수명 : 변수의 주소값
변수형식 *변수명 : 포인터 변수 선언
포인터 변수는 주소값만을 저장하는 변수입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <iostream> using namespace std; int main() { int a = 100; int *b = &a; cout << "a : " << a << endl; cout << "b : " << b << endl; return 0; } |
int 포인터 변수 b에 int 변수 a의 주소값이 저장되어 있는 것을 볼 수 있습니다.
포인터 변수의 변수명 앞에 *를 붙이면 저장된 주소값이 가리키는 값에 접근합니다.
1 2 3 4 5 6 7 8 9 10 11 12 | #include <iostream> using namespace std; int main() { int a = 100; int *b = &a; cout << "*b : " << *b << endl; return 0; } |
이를 이용해볼까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream> using namespace std; void sw(int a, int b) { int temp = a; a = b; b = temp; } int main() { int x = 100, y = 200; sw(x, y); cout << "x : " << x << endl; cout << "y : " << y << endl; return 0; } | cs |
위의 코드가 어떻게 작동할까요?
그동안 공부한대로라면 x와 y의 값이 바뀌어 출력되어야합니다.
하지만 실제로는 그렇지 않습니다.
왜 그럴까요?
함수의 파라매터로 넘겨지는 값은 변수의 값입니다.
x의 100과 y의 200이 a와 b에 복사됩니다.
이 때 a와 b의 값을 서로 바꾸어봤자 a와 b의 값만 바뀌고 그것이 x와 y에 영향을 끼치지는 않습니다.
이런 상황에서 필요한 것이 포인터입니다.
변수를 선언하면 컴퓨터는 해당 형식의 크기만큼 메모리를 할당해줍니다.
변수에 값을 대입하라고 명령하면 컴퓨터는 할당한 메모리에 값을 저장합니다.
그 후 변수의 값을 호출하려고 하면 컴퓨터는 메모리의 주소값을 통해 저장된 값에 접근합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream> using namespace std; void sw(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 100, y = 200; sw(&x, &y); cout << "x : " << x << endl; cout << "y : " << y << endl; return 0; } | cs |
포인터를 통해 x와 y의 값이 아닌 주소값을 넘겨주었습니다.
a와 b를 통해 바뀌는 것은 100과 200이라는 정수가 아니라 x와 y의 주소입니다.
'프로그래밍 > C++' 카테고리의 다른 글
C++ 클래스 실습 예제 - Hero (0) | 2018.02.05 |
---|---|
C++ 문법 - 레퍼런스 (0) | 2018.01.29 |
C++ 문법 - 상수 (0) | 2018.01.28 |
C++ 문법 - 재귀함수 (0) | 2018.01.28 |
C++ 문법 - 오버로딩 (0) | 2018.01.22 |