2. sizeof 알고 씁시다!
32bit 컴퓨터에서 이 코드의 실행 결과는?
int 형 데이터가 7개 있으므로 int 배열의 크기는 28byte 라는 것을 알 수 있습니다
따라서 sizeof(intarray)는 28로 나타날 것입니다
3. sizeof 알고 씁시다!
한 줄을 더 추가해 봅시다.
배열의 이름만 쓰면 배열의 시작 주소라는 사실을 알고 있으므로, int 포인터에 배열
시작주소를 넘겨준 다음 sizeof()로 배열의 크기를 알아볼 수 있을 것 같습니다.
어차피 위 코드의 intArray나 pointerOfArray나 똑같은 값을 가지고 있을 테니까요.
4. sizeof 알고 씁시다!
하지만 결과는 4 입니다.
4는 32bit 컴퓨터에서 포인터의 크기입니다.
sizeof가 배열이 아닌 포인터의 크기만 반환한 것
을 알 수 있습니다.
5. Why?
• 이런 일이 벌어지는 이유는 생각보다 간단한데, sizeof()는 함수
가 아닙니다.
• sizeof() 설명을 msdn에서 찾아보면, 컴파일러가 컴파일 시간에
sizeof()값을 바꿔치기 한다고 되어 있습니다.
• 다시 말해서 컴파일 시간에 알 수 있는 값만 sizeof()로 알 수 있
다는 뜻입니다.
• 따라서 실행 시간에 바뀔 여지가 있는 값은 sizeof()로 크기를 재
려고 해서는 안 됩니다.
Msdn에서 직접 검색해서 읽어보세요!
6. Why?
위 코드에서 intArray[]는 이미 컴파일 시간에 크기가 결정되어 있습니다.
따라서 컴파일러는 sizeof(intArray) 대신에 28이라는 값을 내놓는 것입니다.
7. Why?
만약 이런 함수가 있다면, 컴파일러가 알 수 있는 유일한 사실은 하나 뿐입니다.
arr 변수가 int 포인터라는 사실입니다.
따라서 sizeof(arr)은 32bit 기준으로 무조건 4로 바뀐 다음 실행 파일이 됩니다.