2016-08-02 11 views
27

मैं कुछ कोड है कि इस तरह struct के आकार हो जाता है पाया:struct_type [1] का क्या अर्थ है?

sizeof(struct struct_type[1]); 

मैं परीक्षण किया है और यह struct_type के आकार वापसी करता है।

और

sizeof(struct struct_type[2]); 

रिटर्न दो बार struct आकार।

संपादित करें:

struct struct_type { 
    int a; 
    int b; 
}; 

क्या struct_type[1] वास्तव में क्या मतलब है:

struct_type एक struct, नहीं एक सरणी है?

+0

'struct_type' शायद structs की एक सरणी है, 'sizeof (struct struct_type [1]);' structs की सरणी में पहले तत्व का आकार प्राप्त होता है। – Caw

+1

@iwin no, यह एक एरे नहीं है, कृपया मेरा अपडेट देखें – Nik

+7

आप 'struct_type' की सरणी कैसे घोषित करते हैं? अब सोचें कि आप उस सरणी का आकार किस तरह से प्राप्त करते हैं। यह आम तौर पर अच्छा अभ्यास नहीं होता है, क्योंकि एक व्यक्ति 'आकार' को एक ऑब्जेक्ट लेता है, या तो एक चर या प्रकार के पॉइंटर को डिफ्रेंस करके। यदि आप ऑब्जेक्ट के प्रकार को बदलते हैं तो इस तरह आपका कोड नहीं टूट जाएगा। एक और मुद्दा कोड में एक पूर्णांक निरंतर उपयोग (उर्फ "जादू संख्या") है। खराब अभ्यास, '# परिभाषित' (उर्फ मैक्रो) का उपयोग करें। – Olaf

उत्तर

23

sizeof वाक्य रचना याद रखें:

sizeof (typename); 

यहाँ typename struct struct_type[N] है या अधिक पठनीय रूप struct struct_type [N] किस प्रकार struct struct_type के एन वस्तुओं की एक सरणी है में। जैसा कि आप जानते हैं कि सरणी आकार तत्वों की कुल संख्या से गुणा एक तत्व का आकार है।

13

बस की तरह है:

sizeof(int[1]); // will return the size of 1 int 

और

sizeof(int[2]); // will return the size of 2 ints 

तो करता है:

sizeof(struct struct_type[1]); // return size of 1 `struct struct_type' 

और

sizeof(struct struct_type[2]); // return size of 2 `struct struct_type' 

struct struct_type[1], और struct struct_type[2]struct struct_type के तत्वों के arrays का प्रतिनिधित्व करते हैं, और sizeof केवल उन प्रतिनिधित्व वाले सरणी के आकार को वापस कर रहे हैं।

+0

नहीं, यह नहीं होगा। यह संकलन भी नहीं करेगा। आप 'sizeof' – Olaf

+0

@olaf में इसे घोषित करने की घोषणा नहीं कर सकते हैं। – sps

+0

न केवल वह, लेकिन दोनों int * के आकार को वापस कर देंगे। – Doddy

7
घोषणा सरणी के

int arr[10]; 

आकार या तो एक संकार्य या int [10] रूप arr का उपयोग करके गणना की जा सकती लिए

। चूंकि sizeof ऑपरेटर ऑपरेंड के प्रकार के आधार पर आकार उत्पन्न करता है, sizeof(arr) और sizeof (int [10]) सरणी arr (अंततः arr प्रकार int [10]) का आकार वापस कर देगा।

C11-§6.5.3.3/2:

sizeof ऑपरेटर अपनी संकार्य के आकार (बाइट्स में) है, जो एक अभिव्यक्ति या एक प्रकार की parenthesized नाम हो सकता है अर्जित करता है। आकार ऑपरेटिंग के प्रकार से निर्धारित किया गया है। नतीजा एक पूर्णांक है। यदि ऑपरेंड का प्रकार एक चर लंबाई लंबाई सरणी प्रकार है, तो ऑपरेंड का मूल्यांकन किया जाता है; अन्यथा, ऑपरेंड का मूल्यांकन नहीं किया जाता है और परिणाम एक पूर्णांक निरंतर होता है।

इसी तरह, struct struct_type

struct struct_type a[1]; 

आकार की एक सरणी के लिए sizeof (a) या sizeof(struct struct_type[1]) द्वारा या तो गणना की जा सकती।

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