Game !

 

 

 

 

 

 

포인터 :

주소값을 가리키는 변수

보통 4바이트, 주소값 1개를 가리킬 수 있다.

같은 자료형의 주소값을 가질 수 있다

cf. 배열은 포인터다.

 

ex :

int a = 5;

int* ptr = &a;

=> int* ptr == int 형 주소값을 가리킬 수 있는 포인터 *ptr

 

 

 

더블 포인터 :

포인터를 가리키는 포인터

 

ex :

int a = 5;

int* ptr = &a;

int** pptr = &ptr;

=> int** pptr == int* 형 주소값을 가리킬 수 있는 이중포인터 **ptr

 

 

 

포인터 배열

자료형이 포인터인 배열

 

ex : 

int* ptr[10];

=> 10개의 방이 있는데, 이 각 원소들은 포인터형이므로 주소값을 가질 수 있다

 

 

 

 

배열 포인터 :

2차원 배열일때 쓰이는 경우가 많으며

1개의 배열이 다른 배열을 가리킨다.

 

ex : 

int (*ptr) [10];

=> *ptr (포인터가) , int 형 방 10개의 배열을 가리킨다.

 

 

 

 

함수 포인터

포인터가 함수의 주소값을 가진다.

즉, 함수를 가리키는 포인터

 

ex:

int (*fptr) (int, int);

fptr은 포인터이며, int func(int, int) 이렇게 생긴 함수를 가리킬 수 있다.

즉, fptr 포인터는 반환형이 int 이고 매개변수가 (int,int)인 (이것과일치하는) 함수의 주소값을 가질 수 있다

 

 

 

 

 

const 포인터 :

const의 위치에 따라 의미가 달라진다.

 

ex 1 : 

const int* ptr;

=> 포인터 ptr이 가리키는 내용을 변경하지 않겠다. (대상변경 o , 값 변경 x)

ptr 이 a (int a = 5;)의 주소값을 가지고 있다고 가정할때, 맨 앞에 const를 붙이면 a의 값을 변경시킬 수 없다.

 

ex 2 :

char* const ptr;

=> 포인터가 가리키고 있는 주소값을 변경하지 않겠다. (대상변경 x, 값 변경 o)

ptr 이 a (int a = 5;)의 주소값을 가지고 있다고 가정할때, ptr이 다른 int형 변수 b를 가리키도록 할 수 없다.

 

 

 

 

 

void 포인터

동적할당 기본 반환형이며,

포인터 형이 정해지지 않은 포인터를 의미

순수하게 메모리 주소값만 가진다. 포인터형은 나중에 직접 결정하겠다는 의미

그래서 사용시에는 꼭 명시적으로 반환형을 적어야한다.

 

ex :

void* ptr;