첫 요소 주소로 해석
함수 인자로 전달될 때 배열 이름은 첫 요소를 가리키는 포인터처럼 전달됩니다.
arr -> &arr[0]
배열-포인터 변환, 포인터 산술, 문자열 순회, 다차원 배열 포인터를 구분하면 인덱스와 주소 계산이 연결됩니다.
함수 인자로 전달될 때 배열 이름은 첫 요소를 가리키는 포인터처럼 전달됩니다.
arr -> &arr[0]
p + 1은 주소를 1바이트가 아니라 가리키는 타입 한 칸만큼 이동합니다.
p + i
같은 범위 안에서 sizeof(arr)는 전체 배열 크기, sizeof(p)는 포인터 크기입니다.
sizeof(arr)
char* 문자열은 널 문자를 만날 때까지 읽습니다. 배열
크기와 문자열 길이를 같은 값으로 가정하면 범위를 넘기 쉽습니다.
while (*p != '\0')
대부분의 식에서 첫 요소 주소처럼 변환되지만, 배열 객체 자체가 사라지는 것은 아닙니다.
int arr[] 매개변수는 실제로 포인터로 받으므로, 원소
개수는 별도 인자로 넘겨야 합니다.
행의 크기가 포인터 타입에 포함됩니다. int (*)[3]과
int**는 같은 뜻이 아닙니다.
배열과 포인터 문제를 보면 먼저 “객체의 전체 크기인지, 첫 요소 주소인지, 원소 개수를 누가 알고 있는지”를 분리합니다.