본문 바로가기

C

배열 a에서의 a와 &a를 포인터에 저장할 때의 차이점


int a[4] = {1, 2, 3, 4}가 있다고 하겠습니다.


1. 배열의 이름인 a는 배열의 첫번째 원소의 주소로 해석됩니다.

 

그래서 p를 배열의 이름인 a를 포인터로 사용하기위해서는

첫번째의 원소의 타입이 int이므로 int형 포인터로 코드를 작성해야합니다.

 

int a[4] = {1, 2, 3, 4};

int *p = a;


2. &a는 배열의 전체 타입의 주소로 해석됩니다.

 

-> &a는 배열의 전체 크기가 타입의 주소로 해석됩니다.

&a는 (int[4])가 하나의 타입으로 되는 포인터로 해석합니다.

그래서 이곳에서는 타입이 int[4]이기 때문에

 

int a[4] = {1,2,3,4};     

 int (*p)[4] = &a;

 

로 작성해주어야한다.