< 배열 포인터와 포인터 배열 - 1>


한번에 모두 다루기엔 많아서 나눠서 포스팅 할 계획입니다. 참고해주세요~


배열 포인터와 포인터 배열 - 1 ; 배열 포인터의 기본적인 개념

배열 포인터와 포인터 배열 - 2 ; 포인터 배열의 기본적인 개념

배열 포인터와 포인터 배열 - 3 ; 배열 포인터, 포인터 배열의 추가 예시, 설명




# 우선 배열포인터와 포인터 배열의현법을 보겠습니다.


- 배열 포인터: int(*p)[5] = a;      >> 5개 묶음 배열의 포인터

- 포인터 배열: int* p[5];             >> 포인터 5개 묶음



도대체 이 두개가 어떻게 다른건지 감이 잘 안오실 수도 있습니다. 





# 포인터의 기본적인 부분부터 다시 되집어보면 이렇습니다.


int형 변수 a1을 가리키는 포인터를 정의하는 방법:  int a1;    int* p = &a1;  


int형 1차원 배열 a2를 가리키는 포인터를 정의하는 방법: int a2[5];    int* p = a2;


(배열명은 주소이기 때문에 배열에 대한 포인터를 정의할 때는 &가 필요없죠!)





# 그렇다면, 아래와 같이 정의된 a3라는 int형 2차원 배열은 포인터를 

  어떻게 정의하면 좋을까요?


int a3[3][5]


1번) int* p = a3;

2번) int(*p)[5] = a3;


각각의 경우에 대해 천천히 따져봅시다.




1번) int* p = a3;   


이 경우에는 p가 int형 포인터가 됩니다. 

그래서 p가 1씩 증가할 때마다 가리키는 주소는 int의 크기만큼 (여기서는 4) 증가합니다.  


p = &a3


p+1 = &a3 + 4


p+2 = &a3 + 8

    


2번)  int(*p)[5] = a3;   


이 경우에는 p가 1씩 증가할 때마다 가리키는 주소는 int의 크기의 5배 만큼 (여기서는 20) 증가합니다. 

[5]로 p가 가리키는 주소가 sizeof(int)*5씩 증가하도록 지정을 해준 것이죠. 


p = &a3


p+1 = &a3 + 20


p+2 = &a3 + 40


이러한 것을 바로 배열 포인터라고 합니다. 

a3라는 2차원 배열에서 a3의 한 원소는 int 5개 만큼의 크기를 가지고 있으니 

포인터도 그에 따라 주소를 가리키라고 컴퓨터에게 알려주는거죠!






# 그렇다면, 아래와 같이 정의된 a3라는 char형 2차원 배열은 포인터를 

  어떻게 정의하면 좋을까요?


int형에 대해서 말고 char형에 대해서도 예시를 볼까요? 이번에도 차근차근 짚어봐요~


char형 변수 b1을 가리키는 포인터를 정의:  char b1;    char* p = &b1;  


char형 1차원 배열 b2를 가리키는 포인터를 정의: char b2[5];    char* p = b2;


(여기서도 마찬가지로 배열명은 주소이기 때문에 배열에 대한 포인터를 정의할 때는 &가 필요없죠!)



char형 2차원 배열 b3를 가리키는 포인터를 정의: char b3[3][10]; 


 char(*p) [10] = b3;  

>> 배열포인터


p = &b3

p+1 = &a3 + 10

p+2 = &a3 + 20





배열 포인터는 2차원 배열에 대해서 포인터가 가리키는 주소를 
사용자가 의도한 대로 지정할 수 있게 하는 역할을 한다고 정리할 수 있겠네요~

추후 내용 수정/추가 가능하니 의견 있으면 남겨주세요!





+ Recent posts