#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;
}
Outputnya adalah:
8 4 4 4 4 1
Mengapa output berbeda untuk nilai yang sama?
6.5
bukan pelampung, ini adalahdouble
printf("%d",sizeof(6.5f));
untuk membuatnya menjadifloat
.printf("%zu", sizeof(6.5));
Jawaban:
Konstanta karakter dalam C (berlawanan dengan C ++) memiliki tipe
int
. Jadi panggilan inioutput 4. Itu
sizeof( 'A' )
sama dengansizeof( int )
.Dari Standar C (konstanta Karakter 6.4.4.4)
Di sisi lain (6.5.3.4 Ukuran dan keselarasan operator)
Jadi operan
sizeof
operator dalam ekspresi inisizeof( 'A' )
memiliki tipe int sedangkan dalam ekspresi ini disizeof( a )
mana a dinyatakan sepertioperan memiliki tipe
char
.Perhatikan panggilan itu seperti ini
menggunakan specifier format konversi yang salah. Anda harus menulis
Juga dalam panggilan di atas ada digunakan jenis konstan
double
saat dalam panggilan inivariabel
c
memiliki tipefloat
.Anda bisa mendapatkan hasil yang sama untuk panggilan ini jika panggilan pertama menggunakan konstanta dari tipe float like
sumber
Konstanta, seperti halnya variabel, memiliki jenisnya sendiri:
6.5
: Konstanta titik apung dari tipedouble
90000
: Konstanta bilangan bulat bertipeint
(jikaint
32 bit) ataulong
(jikaint
16 bit)'A'
: Konstanta karakter bertipeint
C danchar
C ++Ukuran yang dicetak adalah ukuran dari tipe di atas.
Juga, hasil dari
sizeof
operator memiliki tipesize_t
. Jadi saat mencetak format specifier yang tepat untuk digunakan adalah%zu
, tidak%d
.sumber
Karena nilainya tidak penting
sizeof
. Ini ukuran jenisnya.konstanta karakter adalah
int
s, bukanchar
s.konstanta floating-point secara default
double
s kecuali Anda sufiks denganf
ataul
.sumber