왜 다음 프로그램의 출력이 4입니까?sizeof ('3') == 4가 GCC 컴파일러를 사용하는 이유는 무엇입니까?
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('3'));
return 0;
}
왜 다음 프로그램의 출력이 4입니까?sizeof ('3') == 4가 GCC 컴파일러를 사용하는 이유는 무엇입니까?
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('3'));
return 0;
}
문자 상수의 유형은 int
하지 char
(그리고 플랫폼에 int
의 크기가 4 개이고) 때문입니다.
C99 드래프트 사양은 말한다 :
이 이상하게 보일 수도 있지만,이 작업을 수행 할 수 있다는 것을 기억정수 문자 상수는 int 형이있다.
const uint32_t png_IHDR = 'IHDR';
즉, 하나의 문자 상수 (위, 4 개) 이상의 실제 문자로 구성 될 수 있습니다. 즉, 결과로 값이 일 때 char
이 될 수 없으므로 즉시 오버플로되고 무의미합니다.
참고 : 위의 내용은 매우 이 아닙니다. 의미있는 것으로 보이는 것은 다른 토론입니다. :)
문자 리터럴은 int
입니다.
'3'과 같은 문자 상수는 int
입니다.
sizeof(character_constant)==sizeof(int)==> In your case sizeof(int)==4
char
이기 때문에이 차이는 C와 C++ 모두로 컴파일되는 일부 코드에 일치하지 않는 동작이 발생할 수 있습니다.
memset(&i, 'a', sizeof('a')); // Questionable code
상수의 값은 그 타입을 결정하지 않습니다. ''3 ''은''char'' 타입의 상수''51'' 일 수 있었지만, 그렇지 않았습니다. –
실제로 그에 따라 수정되었습니다. 감사. – Gangadhar
''x ''리터럴은''char''가 아니기 때문에''int's입니다. – cyphar
이것은 도움이 될 수 있습니다 : [C/C++에서 문자 ('a')의 크기] (http://stackoverflow.com/questions/2172943/size-of-character-a-in-cc) – Jost
@Shanpriya : 너는이 질문을하는거야? 이 프로그램이 무엇을 기대하고 있었으며 그 이유는 무엇입니까? – AnT