sizeof operatörü ile ilgili klasik tuzaklar nelerdir? Bir diziyi fonksiyona geçirince sizeof neden farklı sonuç verir?
Cevap
sizeof derleme anında hesaplanan bir operatördür ve ifadenin tipinin byte cinsinden boyutunu verir. En sık tuzak, dizinin fonksiyon parametresi olarak geçirildiğinde pointer'a dönüşmesidir (array decay).
#include <stdio.h>
void f(int arr[10]) /* aslında: int *arr */
{
printf("%zu\n", sizeof(arr)); /* 4 veya 8: pointer boyutu */
}
int main(void)
{
int arr[10];
printf("%zu\n", sizeof(arr)); /* 40 (int 4 byte ise) */
printf("%zu\n", sizeof(arr) / sizeof(arr[0])); /* 10 */
f(arr);
return 0;
}Diğer klasik sorular
| İfade | Sonuç (32-bit int, C dili) | Açıklama |
|---|---|---|
sizeof('a') | 4 | C'de karakter sabiti int'tir (C++'ta 1) |
sizeof("abc") | 4 | Sondaki \0 dahil |
strlen("abc") | 3 | \0 hariç, çalışma zamanında |
sizeof(char) | 1 | Tanım gereği her zaman 1 |
sizeof(i++) | 4 | İfade değerlendirilmez, i artmaz |
sizeof(struct {char c; int i;}) | 8 | Padding nedeniyle |
int i = 5;
size_t n = sizeof(i++);
printf("%d\n", i); /* 5: sizeof içindeki ifade çalışmaz (VLA hariç) */
char *p = "hello";
char a[] = "hello";
sizeof(p); /* pointer boyutu */
sizeof(a); /* 6 */Güvenli eleman sayısı makrosu
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))Bu makro pointer'a uygulanırsa yanlış sonuç verir; GCC'de __builtin_types_compatible_p ile pointer'ı reddeden sürümler yazılabilir (Linux kernel'deki ARRAY_SIZE bunu yapar). Fonksiyonlara dizi geçirirken boyutu her zaman ayrı bir parametre olarak verin.
İlgili C Programlama soruları
- C dilinde volatile anahtar kelimesi ne işe yarar?
- Bir yazmaçtaki belirli bir biti set, clear ve toggle eden C kodunu yazın.
- Stack ile heap arasındaki fark nedir? Gömülü sistemlerde dinamik bellek kullanımından neden kaçınılır?
- Endianness nedir? Little-endian ile big-endian farkı nedir?
- Bit field nedir? Donanım register'larına erişimde bit field mi yoksa bit maskesi mi kullanılmalı?
- Fonksiyon pointer'ları ve callback tabloları gömülü sistemlerde nasıl kullanılır? Bir state machine örneği verin.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.