본문 바로가기

C++

[C++] 포인터 배열과 배열 포인터

포인터 배열

 

포인터 배열은 포인터를 요소로 담고 있는 배열이다.

 

int *arpi[5];

 

arpi 포인터 배열은 int형 포인터를 5개 가지고 있는 배열이다.

 

 

배열 포인터

 

배열 포인터는 2차원 배열 이상의 다차원 배열에서 부분 배열을 가리키는 포인터다.

 

char arps[5][9]={"고양이","개","오랑우탄","돼지","지렁이"};

char (*ps)[9];

 

arps는 9바이트의 문자열을 5개 가지고 있는 2차원 배열이고

ps포인터는 9바이트 문자열을 가리키는 포인터이다.

위와 같이 배열 포인터의 형식은 요소의 자료형(*포인터명)[배열 크기] 이다.

*포인터명의 괄호를 없애면 포인터 배열이 되어버리기 떄문에 없애면 안된다.

변수를 배열 포인터로 캐스팅할 때는 포인터명을 뺀 요소의 자료형(*)[배열 크기]로 캐스팅한다.

 

ar배열에 대해서

ar(배열명)은 배열의 시작번지를 가리키는 포인터 상수이다.

&ar은 ar에 대한 번지인데 포인터 상수는 번지를 갖지 않는다.

그런데 이후에 &ar일때 ar이 포인터 상수가 아닌 배열 그 자체를 가리키는 것으로 변경되었다. 

그래서 int ar[5]={1,2,3,4,5}; 일 때

ar의 형은 int * const 이고&ar은 int (*) [5] const 이다. 즉 (int)*5 = 20바이트의 배열을 가리키는 포인터가 된다.

'C++' 카테고리의 다른 글

[C++] Const 포인터  (0) 2022.01.03
[C++] 문자형 배열 vs 문자형 포인터  (0) 2022.01.02
[C++] 포인터 vs 배열  (0) 2022.01.02
[C++] 다차원배열  (0) 2022.01.02
[C++] 이중 포인터  (0) 2022.01.02