[c] 값이 sizeof 연산자에 직접 전달 될 때 데이터 유형의 크기가 다른 이유는 무엇입니까?

#include <stdio.h>
int main() {
    char a = 'A';
    int b = 90000;
    float c = 6.5;
    printf("%d ",sizeof(6.5));
    printf("%d ",sizeof(90000));
    printf("%d ",sizeof('A'));
    printf("%d ",sizeof(c));
    printf("%d ",sizeof(b));
    printf("%d",sizeof(a));
    return 0;
}

출력은 다음과 같습니다.

8 4 4 4 4 1

동일한 값에서 출력이 다른 이유는 무엇입니까?



답변

C의 문자 상수 (C ++와 반대)는 유형이 int있습니다. 그래서이 전화

printf("%d",sizeof('A'));

출력 4. 그것은 sizeof( 'A' )같다 sizeof( int ).

C 표준에서 (6.4.4.4 문자 상수)

10 정수 문자 상수의 유형은 int ….

반면에 (6.5.3.4 크기 및 정렬 연산자)

4 char, unsigned char 또는 signed char 형식의 피연산자에 sizeof를 적용하면 결과는 1입니다.

따라서이 sizeof표현식 에서 연산자 의 피연산자는 sizeof( 'A' )int 유형을 가지며이 표현식 sizeof( a )에서 a는 다음과 같이 선언됩니다

char a = 'A';

피연산자는 유형이 char있습니다.

이 전화에주의하십시오

printf("%d",sizeof(6.5));

잘못된 변환 형식 지정자를 사용하십시오. 당신은 작성해야

printf("%zu",sizeof(6.5));

또한 위의 호출 double에서이 호출 중에 유형의 상수가 사용됩니다.

printf("%zu",sizeof(c));

변수 c의 유형은 float입니다.

첫 번째 호출이 float 유형의 상수를 사용한 경우 이러한 호출에 대해 동일한 결과를 얻을 수 있습니다.

printf("%zu",sizeof(6.5f));


답변

변수와 마찬가지로 상수는 자체 유형을 갖습니다.

  • 6.5 : 유형의 부동 소수점 상수 double
  • 90000: 유형의 정수 상수 int( int32 비트 인 경우) 또는 long( int16 비트 인 경우)
  • 'A' : intC 및 charC ++에서 유형의 문자 상수

인쇄되는 크기는 위 유형의 크기입니다.

또한 sizeof연산자 의 결과 는 유형 size_t입니다. 따라서 사용할 올바른 형식 지정자를 인쇄 할 때는 %zu그렇지 않습니다 %d.


답변

값이 중요하지 않기 때문 sizeof입니다. 유형의 크기입니다.

  • 문자 상수는 ints가 아니라 chars입니다.

  • 부동 소수점 상수는 또는로 double접미사를 지정하지 않는 한 기본적으로 입니다.fl


답변