배열 이름은 문맥에 따라 배열 자체로 남거나 첫 요소 포인터가 된다

헷갈림의 원인은 배열 이름이 항상 포인터인 것도, 항상 배열 자체인 것도 아니기 때문입니다. 크기 계산과 주소 연산에서는 배열 타입이 유지되고, 많은 식과 함수 전달에서는 첫 요소 주소로 변환됩니다.

배열 자체로 남는 문맥

sizeof(arr)전체 배열의 바이트 크기를 계산합니다.&arr전체 배열의 주소를 얻습니다.

첫 요소 포인터가 되는 문맥

arr + 1다음 원소 주소로 이동합니다.void f(int a[])매개변수에서는 길이 정보가 사라집니다.
문맥
배열 자체 유지
포인터로 변환
크기 계산
sizeof(arr)는 전체 크기입니다.
함수 인자 a의 sizeof는 포인터 크기입니다.
주소 해석
&arr는 배열 전체 주소입니다.
arr는 식에서 &arr[0]처럼 쓰일 수 있습니다.
산술 단위
&arr + 1은 배열 전체 크기만큼 이동합니다.
arr + 1은 다음 원소로 이동합니다.
배열 포인터 코드를 읽을 때는 먼저 “지금 배열 자체인가, 첫 요소 포인터로 변환됐는가”를 확인합니다.