sizeof operatörü, bir türün veya nesnenin derleme zamanında byte cinsinden boyutunu belirlemek için kullanılır. Genellikle bellek ayırma, yapıların ve dizilerin boyutlarını hesaplama için gereklidir.
Örnek:
int a; printf("%zu ", sizeof(a)); // int türündeki a değişkeninin boyutu printf("%zu ", sizeof(int)); // int türünün boyutu
Ayrıntılar:
sizeof her zaman 0 veya daha büyük olan size_t değerini döndürür.sizeof(array) tüm dizinin boyutunu döndürür, işaretçinin boyutunu değil.Tehlike örneği:
void foo(int arr[]) { printf("%zu ", sizeof(arr)); // işaretçinin boyutunu verir, dizinin değil! } int arr[10]; foo(arr); // sizeof(arr) == 40 (genelde), foo seviyesinde sizeof(arr) == 8 (genelde)
C dilinde sizeof('a') ifadesi ne döndürecektir?
Cevap: 'a' char gibi görünmesine rağmen, sizeof('a') ifadesinin sonucu int türünün boyutuna eşittir, çünkü karakter sabiti C'de inttir.
Örnek:
sizeof('a') // genelde 4, 1 değil
Hikaye
malloc(strlen(str) * sizeof(char)) şeklinde yapıldı ve son karakter göz ardı edildi. Bu, son byte'ın kaybolmasına ve standart kütüphane fonksiyonlarıyla çalışırken hatalara neden oldu.Hikaye
sizeof(arr) kullandı, ancak yalnızca işaretçinin boyutunu elde etti. Sonuç olarak belleğe çok az veri yazıldı ve bu da heap'in bozulmasına neden oldu.Hikaye
Bir geliştirici, bir harf için bellek ayırmak amacıyla sizeof('a') kullanmaya karar verdi, 1 byte beklerken 4 (veya 8) aldı — bu, bellek israfına ve beklenen boyuta bağımlı kodda sorunlara yol açtı.