Konstanta karakter dalam C (berlawanan dengan C ++) memiliki tipe int
. Jadi panggilan ini
printf("%d",sizeof('A'));
output 4. Itu sizeof( 'A' )
sama dengan sizeof( int )
.
Dari Standar C (konstanta Karakter 6.4.4.4)
10 Sebuah konstanta karakter integer memiliki tipe ....
Di sisi lain (6.5.3.4 Ukuran dan keselarasan operator)
4 Ketika sizeof diterapkan pada operan yang memiliki tipe char, unsigned char, atau char yang ditandatangani, (atau versi yang berkualitas) hasilnya adalah 1.
Jadi operan sizeof
operator dalam ekspresi ini sizeof( 'A' )
memiliki tipe int sedangkan dalam ekspresi ini di sizeof( a )
mana a dinyatakan seperti
char a = 'A';
operan memiliki tipe char
.
Perhatikan panggilan itu seperti ini
printf("%d",sizeof(6.5));
menggunakan specifier format konversi yang salah. Anda harus menulis
printf("%zu",sizeof(6.5));
Juga dalam panggilan di atas ada digunakan jenis konstan double
saat dalam panggilan ini
printf("%zu",sizeof(c));
variabel c
memiliki tipe float
.
Anda bisa mendapatkan hasil yang sama untuk panggilan ini jika panggilan pertama menggunakan konstanta dari tipe float like
printf("%zu",sizeof(6.5f));
6.5
bukan pelampung, ini adalahdouble