배열 이름과 포인터 변수는 주소처럼 보여도 같은 객체가 아니다
배열 이름은 첫 요소 주소로 변환될 수 있지만, 저장 공간 자체를 소유하는 배열입니다. 포인터 변수는 주소를 담는 별도 변수라서 재지정과 sizeof 결과가 다릅니다.
포인터 변수
int* p = arr어딘가의 int 주소 하나를 보관합니다.기준
배열 이름
포인터 변수
읽는 법
재지정
다른 주소를 대입할 수 없습니다.
다른 주소로 바꿀 수 있습니다.
객체 이름인지 주소 변수인지 봅니다.
sizeof
sizeof(arr)는 전체 바이트입니다.sizeof(p)는 주소 변수 크기입니다.함수 인자에서는 배열 크기가 유지되지 않습니다.
대입
배열끼리 직접 대입할 수 없습니다.
포인터 값은 교체할 수 있습니다.
요소 복사와 주소 복사를 구분합니다.
인덱싱
arr[i]는 배열 원소 접근입니다.p[i]도 기준 주소에서 산술 접근입니다.문법보다 기준 주소와 길이를 확인합니다.
둘이 비슷해지는 순간은 decay 때문입니다. 크기 계산, 재지정, 함수 전달에서는 배열 자체와 포인터 변수를 분리해서 읽어야 합니다.