2010-10-05 16 views
11

मैं सी में किसी संरचना में सदस्य का आकार कैसे प्राप्त कर सकता हूं?एक संरचना सदस्य का आकार

struct A 
{ 
     char arr[64]; 
}; 

मैं ऐसा ही कुछ की जरूरत है:,

sizeof (ए :: आगमन)

धन्यवाद

+1

जब आप 'sizeof (ए :: आगमन)' की कोशिश की क्या हुआ? – pmg

+0

@pmg 'ए' सी –

+4

सी में एक प्रकार का नहीं है 'sizeof (ए :: एआर)' के जवाब में" वाक्यविन्यास त्रुटि "कहा। सी इसके वाक्यविन्यास में कहीं भी एक डबल कोलन का उपयोग नहीं करता है। –

उत्तर

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

संक्षेप struct A* का एक प्रकार के लिए एक नल पॉइंटर डाली, लेकिन जब से sizeof का संचालन मूल्यांकन नहीं किया जाता है, यह कानूनी है और आपको संरचना के उदाहरण के बिना संरचना सदस्यों का आकार प्राप्त करने की अनुमति देता है।

असल में, हम यह दिखा रहे हैं कि इसका एक उदाहरण पता 0 पर मौजूद है और ऑफसेट और sizeof निर्धारण के लिए इसका उपयोग किया जा सकता है।

आगे विस्तार से बता दें यह लेख पढ़ें:

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

+4

विंडोज़ में इस निर्माण के लिए मैक्रोज़ हैं ('RTL_FIELD_SIZE (प्रकार, फ़ील्ड) 'और लिनक्स (' FIELD_SIZE (टी, एफ) ') –

+4

@ माइकल: गैर-पोर्टेबल सिस्टम-विशिष्ट मैक्रोज़ का उपयोग करने का कोई कारण नहीं है जब आप अपना पोर्टेबल कार्यान्वयन आसानी से लिख सकते हैं। –

+0

/* हू, दिलचस्प रूप से पर्याप्त यह अमूर्त के साथ काम नहीं करता है structs/classesयों */यह एक ही कक्षा के भीतर स्थिर स्थिरांक पर काम नहीं करता है। –

संबंधित मुद्दे