array pointer api

배열과 포인터는 길이와 소유권을 따 확인

배열 이름이 포인터처럼 보이는 순간에도 배열 전체 크기, 첫 원소 주소, 함수에 전달된 포인터는 서로 다른 정보를 담습니다.

읽어야 할 정보

memory contract
int arr[5]

배열 원본

요소가 연속 저장되고 sizeof는 전체 바이트를 반환합니다.

int* p

포인터 변수

주소만 저장하므로 길이와 소유권은 따로 알 수 없습니다.

arr + i

원소 이동

포인터 산술은 타입 크기만큼 이동하며 범위 안에서만 안전합니다.

func(arr, n)

함수 전달

배열은 첫 원소 주소로 전달되므로 길이 n을 함께 넘깁니다.

소유하지 않음

포인터로 받은 배열은 보통 빌린 메모리입니다.

길이를 함께 둠

끝 위치나 요소 개수 없이는 범위를 검증할 수 없습니다.

재지정 구분

포인터 변수는 바뀔 수 있지만 배열 이름은 대입 대상이 아닙니다.

storage decay length bounds

안전 기준 배열과 포인터가 같은 문법으로 보이면 “누가 메모리를 소유하는가”와 “몇 개를 읽어도 되는가”를 먼저 찾습니다.