C'deki karakter sabitleri (C ++ 'nın tersi) tipindedir int
. Yani bu çağrı
printf("%d",sizeof('A'));
4. sizeof( 'A' )
Eşittir sizeof( int )
.
C Standardından (6.4.4.4 Karakter sabitleri)
10 Bir tamsayı karakter sabiti int türüne sahiptir ....
Öte yandan (6.5.3.4 Sizeof ve alignof operatörleri)
4 sizeof, char, imzasız karakter veya imzalı karakter içeren bir işlenene (veya bunun kalifiye bir versiyonuna) uygulandığında sonuç 1 olur.
Dolayısıyla, sizeof
bu ifadedeki operatörün işleneni, a sizeof( 'A' )
ifadesininsizeof( a )
char a = 'A';
işlenen türü vardır char
.
Bunun gibi çağrılara dikkat edin
printf("%d",sizeof(6.5));
yanlış dönüşüm biçimi belirtecini kullanın. Yazmak zorundasın
printf("%zu",sizeof(6.5));
Ayrıca yukarıdaki çağrıda double
, bu çağrı sırasında tipte bir sabit kullanılır.
printf("%zu",sizeof(c));
değişkenin c
türü vardır float
.
İlk çağrı şamandıra türünde bir sabit kullanıyorsa, bu çağrılar için aynı sonucu alabilirsiniz
printf("%zu",sizeof(6.5f));
6.5
bir kayan nokta değil, birdouble