C에서 배열과 포인터에 sizeof 를 사용하면 정적배열은 배열의 크기를 포인터는 포인터타입의 크기를 돌려준다.
sizeof 는 함수처럼 보이기에 런타임에 실행될 것처럼 생겼으면서 런타임중에는 정적배열도 배열의 크기를 포인터도 배열의 크기를 모르는 것으로 처리 될텐데 왜 sizeof 를 사용했을 때 결과가 다른 것일까
사실 이는 sizeof 가 컴파일시간에 처리되는 연산자이기 때문이다.
sizeof 는 함수가 아니다.
int arr[10];
int* ptr = arr;
이러한 배열이 선언된 경우 컴파일러는 이 10 이라는 숫자를 컴파일타임에 사용할 내부 심볼테이블에 배열의 size로 저장을 한다.
이렇게 내부 심볼 테이블에 저장을 하면 컴파일시간 동안에 sizeof 연산에 배열이 들어간 경우 그 배열의 크기를 sizeof 연산을 사용한 위치에 상수값으로 치환을 한다.
이러한 선언문에 따른 컴파일러의 처리과정에 의한 차이로 sizeof 연산에 정적배열이 들어간 경우 배열의 크기를 포인터는 포인터 타입의 크기를 돌려주게 된다. 이와 동일한 이유로 동적배열 또한 컴파일타임에 크기를 알 수 없기에 배열의 크기를 돌려주지 못한다.
'기타, 일상' 카테고리의 다른 글
| 안쓰는 노트북 서버로 만들기 (0) | 2026.02.01 |
|---|