5.4. sizeof İşleci
C dilinin bir diğer anahtar sözcüğü de
sizeof’tur. sizeof
C dilinde bir anahtar sözcük ile ifade
edilen tek işleçtir. Bir fonksiyon değildir; diğer tekli işleçler ile aynı
önceliğe sahip olan ve sağdan sola birleşme özelliği gösteren bir tekli
işleçtir. Genelde, ya bir değişkene yada bir tipe uygulanır. Bu işleç
işlenenin tipinden olan bir değişkenin bellekte tutacağı bayt sayısını (bir
değişmez) döndürür. Bir önceki kısmın değişken tanımlamalarını kullanan
örnekler aşağıda verilmiştir:
printf("%ld %ld %ld %ld %ld\n", (long)sizeof i,
(long)sizeof a, (long)sizeof s1, (long)sizeof z[3],
(long)sizeof 1.0);
printf("%ld %ld %ld %ld %ld\n", (long)sizeof(int),
(long)sizeof(float), (long)sizeof(double),
(long)sizeof(int *), (long)sizeof(kompleks[3]));
printf("%ld %ld %ld %ld %ld\n", (long)sizeof(vektor),
(long)sizeof(long[4]),
(long)sizeof(struct { char *c; vektor v[5]; }),
(long)sizeof *s1, (long)sizeof(a[1]));
Bu deyimler farklı sistemlerde farklı çıktılar görüntüleyecektir. Sistemimizde çıktı şöyledir:
2 96 2 8 8 2 4 8 2 24 12 16 62 1 12
Bunun anlamı, int
değişkenlerinin 2 bayt, float
değişkenlerinin 4 bayt, double
değişkenlerinin 8 bayt ve gösterge değişkenlerinin 2 bayt
tuttuğudur. Her gerçekleştirmede sizeof(char)’ın
1 olduğu tanımlanmıştır. Diğer sayıları kendiniz doğrulamaya çalışın.
Bir long kaç bayttır?
sizeof’un değerinin derleme
zamanında belirlendiğine dikkat edin, böylece sizeof
bir değişmez ifadenin kullanılmasına izin verilen
yerlerde kullanılabilir. Standarda göre sizeof
işlecinin verdiği sayının int
olması beklenmemelidir; gerçekleştirmeye bağlı olarak
long veya herhangi bir uygun tamsayı tipi
olabilir. Bu (unsigned olan) tip
standart başlık dosyası stddef.h’de size_t
ismi ile tanımlanmıştır. Bu sayıyı printf’e
geçirmeden önce bir kalıpla long’a
çevirecek ve long için olan dönüşüm tanımlamasını
kullanacak kadar dikkatli davrandık.
sizeof ile ilgili bir
sözdizimsel ayrıntı da, bir ifade yerine bir tipe uygulandığında tipin
parantezler içine alınması gerektiğidir.
