Coding/Tip !!
포인터와 역참조
IMyoungho
2018. 9. 19. 05:12
포인터 *
* 란 역참조(Dereference)연산자라는 의미이다.
-> 포인터 변수에는 메모리 주소가 저장되는데 이 메모리주소의 값을 가져올때 사용하는 것이 바로 역참조 연산자(*)이다.
1 2 3 4 5 6 7 | int *pointer; // 포인터 변수 선언 int test =1; // test에 1을 저장 pointer = &test; // test의 메모리 주소를 포인터 변수에 저장한다는 의미 *pointer = 7; // 역참조 연산자를 의미함으로 test의 메모리 주소에 접근하여 7을 저장함 |
이 경우
cout << *pointer << endl;
을 하게되면 역참조 연산자인 (*)를 사용했음으로 test의 메모리 주소에 접근하여 그 내부의 값을 가져오게된다.
역참조 연산자는 포인터 앞에 오게 되고 이 때 알아둬야할 것은
포인터는 변수의 주소만을 가리키는 것이며 주소에 접근하여 값을 가져오는 것은 역참조라는 것이다.
# 포인터는 변수의 주소만을 가리킨다.
# 역참조는 주소에 접근하여 값을 나타낸다.
포인터와 역참조 모두 *를 사용하기 때문에 헷갈릴 수 있지만
포인터는 선언시에 사용하고
이러한 포인터를 사용할 때의 *는 포인터의 메모리 주소를 역참조 하겠다는 의미로 생각하면 편하다.
역참조 연산자는 자료형을 바꾸는 기능도 가지고 있다.
예를 들어 위의 예시에서
int *point; 에서 *point처럼 역참조를 사용하면 pointer to int 에서 단순히 int가 된다.
int poiner -> int
1 2 3 4 5 6 7 8 | int *point; int test =2; point = test; // point 는 int pointer 형이고 test는 int임으로 경고발생 *point = test;// *point는 int형이고 test도 int임으로 자료형 일치! point = &test; // point는 int pointer 형이고 &test는 int형 변수의 주소임으로 일치! (pointer of int) = (address of int) |
반응형