2017-01-09 2 views
0
는 아래 프로그램

sizeof 문자 상수가 4 바이트 인 이유는 무엇입니까?

출력을 생성

- 1~4 4

#include<stdio.h> 
void main() 
{ 
    char ch; 
    ch='A'; 
    printf("%d %d %d\n",sizeof(ch),sizeof('A'),sizeof(3.2f)); 

} 

왜 문자 상수의 크기는 4 바이트이다?

+2

플랫폼에있는 'int'는 4 바이트를 가지고 있기 때문에. – Olaf

+0

C 문자 리터럴은'sizeof (int)'가 큽니다. C++ 문자 리터럴은'sizeof (char)'가 큽니다. 상수'4'가 아니라'sizeof (int)'입니다. – Downvoter

답변

3

C 표준에 따라 문자 상수의 유형은 int이고 char이 아니기 때문에.

사실상이 플랫폼의 sizeof(int)입니다.

+0

세부 사항 : C 표준에 따르면 리터럴에는 _string literal_과 _compound literal_의 두 가지 종류가 있습니다. ''A ''는 리터럴로 식별되지 않고 _ 문자 상수로 식별됩니다. – chux

+0

@chux - 감사합니다. 영어의 표준 사용에있어서 이런 종류의 불일치는 때때로 나를 죽이는 것입니다. – StoryTeller

+0

아마도 C가 _constant_에서 주소 'printf ("% p \ n", (void *) & "abc");)를 가질 수있는 영어를 구별하는 데 영어가 모순되지 않습니다. : printf ("% p \ n", (무효 *) & 'a'); – chux

2

ch는 char 유형이므로 1 바이트입니다.

'A'는 int 유형이므로 4 바이트입니다. 왜냐하면 C에서 문자 상수는 int 형이기 때문이다.

마지막으로 float 값은 4 바이트입니다.

이 값은 사용중인 기계에 따라 다릅니다.

편집 - INT와 부동의 범위는 사용중인 시스템에 따라

는, 16 비트 INT 32 비트의 int로서 같은 일반적인

.

+0

예, 이것이 그가 찾고있는 대답입니다. '는 int로 변환됩니다 – Nick

+4

아무것도 변환되지 않습니다 * 문자 리터럴 *은 * int 형식입니다 – StoryTeller

+3

"변환 된"단어의 사용에 대해서는 확실하지 않습니다. 정확하지 않습니까? 그것은 * int *이고 ('ch = 'A';'int'는'char'로 변환됩니다)? – sepp2k