포인터와 배열

배열 이름과 포인터는 닮았지만 같은 것은 아닙니다

배열 이름은 많은 식에서 첫 요소 주소처럼 변환되지만, 배열 자체의 크기 정보와 대입 가능성은 포인터와 다릅니다.

배열 이름

첫 요소 주소로 변환

함수 호출이나 수식에서 배열 이름은 &arr[0]처럼 쓰이는 경우가 많습니다.

arr -> &arr[0]
포인터 산술

타입 크기만큼 이동

p + 1은 주소에 1바이트가 아니라 가리키는 타입 크기만큼 더합니다.

p + i
차이

배열은 대입 불가

배열 이름은 포인터 변수처럼 다른 주소를 저장하도록 바꿀 수 없습니다.

arr = p no
문자열

char 포인터와 널 문자

C 스타일 문자열은 char*로 순회할 수 있지만 끝의 널 문자를 기준으로 멈춰야 합니다.

char* s
함수 전달배열을 함수에 넘기면 크기 정보가 사라지므로 길이를 별도 매개변수로 전달해야 합니다.
범위 확인포인터 산술은 자동 범위 검사를 하지 않아 시작과 끝 주소를 함께 관리해야 합니다.
다차원 배열2차원 배열 포인터는 열 크기가 타입에 포함되므로 단순 int**와 다릅니다.