#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
(int
32 비트 인 경우) 또는long
(int
16 비트 인 경우)'A'
:int
C 및char
C ++에서 유형의 문자 상수
인쇄되는 크기는 위 유형의 크기입니다.
또한 sizeof
연산자 의 결과 는 유형 size_t
입니다. 따라서 사용할 올바른 형식 지정자를 인쇄 할 때는 %zu
그렇지 않습니다 %d
.
답변
값이 중요하지 않기 때문 sizeof
입니다. 유형의 크기입니다.
-
문자 상수는
int
s가 아니라char
s입니다. -
부동 소수점 상수는 또는로
double
접미사를 지정하지 않는 한 기본적으로 입니다.f
l