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)
 





반응형