자료형의 크기를 얻을 때 사용한다.
sizeof(자료형);
이렇게 함수 사용하듯이 사용하면 된다.
생김새는 함수처럼 생겼지만,
특이하게도 sizeof 는 "연산자" 이다.
또 다른 특이한 점은,
sizeof 는 런타임시가 아닌,
컴파일시에 계산된다는 것이다.
아... 별종이구먼.
간단한 테스트를 해보기로 했다.
#include <stdio.h> int main() { char *p="ABC"; char a[]="ABC"; printf("%lu\n", sizeof(p)); printf("%lu\n", sizeof(*p)); printf("%lu\n", sizeof(a)); printf("%lu\n", sizeof("ABC")); return 0; } |
결과
8 1 4 4 |
8 이 나오는건, 포인터 변수이기 때문이다.
포인터 변수는 64bit machine 에서 8바이트이기 때문이다.
요즘 웬만한 컴퓨터는 64bit 이므로 아마 대부분 8 이라고 나올것이다.
당연한 이야기겠지만, 32bit machine 에서는 4 가 나올 것이다.
1 이 나온건, char 의 size 가 1 이기 때문이다.
*p 는 p 포인터의 내용물을 의미하기 때문이다.
그 내용물은 char 이므로 1 이 나온 것이다.
만약, p가 int *p 였다면, 4 가 나왔을 것이다.
4 가 나온건, a[] 배열의 크기가 4 이기 때문이다.
"ABC" 문자열을 저장하기 위해서는, 맨 마지막에 NULL 이 추가되어야 한다.
a[] 라고 정의하면, [] 안에 숫자는 컴파일러가 자동으로 채워준다.
그러므로 a[4] 라고 컴파일러가 자동으로 채워줬을 것이다.
그러므로 4 가 나온다.
마지막으로 4가 나온건, 문자열이 배열로 처리 되었기 때문이다.
컴파일 단계에서 배열로 처리되어서, 이미 문자열 크기만큼
배열이 할당되고, 그 크기가 출력된 것이다.
댓글 없음:
댓글 쓰기