문제:


sizeof(char *)가 4인 컴파일러에서 다음 식의 값은?


sizeof "hello"


① 4

② 5

③ 6

④ 7

⑤ 컴파일 오류: 괄호가 없어서



정답: ③ 6


해설:


"hello"라는 문자열 상수(string literal) 자체는 문자 배열을 나타낸다.

다시 말해 {'h', 'e', 'l', 'l', 'o', '\0'} 라는 상수 char 배열과 같은 것이다.

그래서 sizeof "hello"는 원소 개수가 6이고 원소 크기가 sizeof(char) == 1이므로(표준에 의해) 6*1 = 6이 된다.


sizeof "hello"가 아니라 sizeof("hello")가 되어야 하지 않겠나 싶은 사람도 있겠지만,

sizeof 자체는 연산자기 때문에 괄호가 필요 없다. 괄호가 있어야 하는 경우는 어떤 식이나 값이 아니라

자료형에 대한 크기를 조사할 때만 예외적으로 괄호를 써줄 뿐이다. 예) sizeof(int), sizeof 4, sizeof 5, sizeof "hello", sizeof a

(자료형의 크기를 조사할 때 괄호를 써주는 까닭은 형 변환(캐스팅) 할 때 (자료형) 형식으로 쓰는 것의 영향으로 보인다.)


해설을 원하는 사람이 있어서 굳이 올려 봄.