Standart C Programlama Dili


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.