C'de dizimin boyutunu nasıl belirleyebilirim?

C'de dizimin boyutunu nasıl belirleyebilirim?

Yani, dizinin tutabileceği eleman sayısı?

Çözüm

Yönetici özeti:

int a[17];
size_t n = sizeof(a)/sizeof(a[0]);

Tam cevap:

Dizinizin boyutunu bayt cinsinden belirlemek için sizeof Operatör:

int a[17];
size_t n = sizeof(a);

Bilgisayarımda, ints 4 bayt uzunluğundadır, yani n 68'dir.

Dizideki eleman sayısını belirlemek için dizinin toplam boyutunu dizi elemanının boyutuna böler. Bunu tür ile şu şekilde yapabilirsiniz:

int a[17];
size_t n = sizeof(a) / sizeof(int);

ve doğru cevabı (68 / 4 = 17) elde edersiniz, ancak eğer 'a'yı değiştirmeyi unutursanız kötü bir hata ile karşılaşırsınız aynı zamanda sizeof(int) de olabilir.

Dolayısıyla tercih edilen bölen sizeof(a[0]), yani dizinin sıfırıncı elemanı.

int a[17];
size_t n = sizeof(a) / sizeof(a[0]);

Diğer bir avantajı ise artık kolayca parametrelendirebilmenizdir dizi adını bir makroda girin ve alın:

#define NELEMS(x)  (sizeof(x) / sizeof((x)[0]))

int a[17];
size_t n = NELEMS(a);
Yorumlar (20)

Şunu da belirtmek gerekir ki, `sizeof' işaretçiye dönüşmüş bir dizi değeri ile uğraşırken yardımcı olmaz: bir dizinin başlangıcını işaret etse bile, derleyici için bu dizinin tek bir elemanına işaret eden bir işaretçi ile aynıdır. Bir işaretçi, kendisini başlatmak için kullanılan dizi hakkında başka hiçbir şeyi "hatırlamaz".

int a[10];
int* p = a;

assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));
Yorumlar (4)
sizeof(array) / sizeof(array[0])
Yorumlar (0)