2010-10-05 23 views
11

C öğesindeki bir öğenin boyutunu nasıl alabilirim?struct struct öğesinin boyutu

struct A 
{ 
     char arr[64]; 
}; 

i böyle birşey gerekir:,

sizeof (A :: arr)

sayesinde

+1

Eğer 'sizeof (A :: arr)' çalıştığımızda ne oldu:

ayrıca okumak, bu makale ayrıntılı için? – pmg

+0

@pmg 'A' C –

+4

C türünde değil. 'Sizeof (A :: arr)' yanıtı olarak" sözdizimi hatası "dır. C, sözdiziminde herhangi bir yerde çift sütun kullanmaz. –

cevap

35
sizeof(((struct A*)0)->arr); 

Kısaca struct A* bir türüne boş gösterici dökme, ancak o zamandan beri sizeof işleneni değerlendirilmez, bu yasaldır ve yapının bir örneğini oluşturmadan yapı üyelerinin boyutunu almanıza olanak tanır. Temel olarak, bir örneğinin adres 0'da mevcut olduğunu ve ofset ve sizeof saptaması için kullanılabileceğini iddia ediyoruz.

http://www.embedded.com/design/prototyping-and-development/4024941/Learn-a-new-trick-with-the-offsetof--macro

+4

Windows ('RTL_FIELD_SIZE (tür, alan) 've Linux (' de bu yapı için makrolar vardır FIELD_SIZE (t, f) ') –

+4

@Michael: Kendi taşınabilir uygulamanızı kolayca yazabildiğiniz zaman, portatif olmayan sisteme özgü makroları kullanmanın bir sebebi yok. –

+0

/* Huh, ilginç bir şekilde bu soyut ile çalışmaz structs/classes */Aynı sınıf içinde statik sabitler üzerinde çalışmaz –