c99 - Flexible array member in C-structure -


सी-स्टडी अनुभाग 6.7.2.1 से उद्धरण,

  struct s {int n ; डबल डी []; };  

यह एक मान्य संरचना घोषणा है। मैं इस तरह के वाक्यविन्यास के कुछ व्यावहारिक उपयोग की तलाश कर रहा हूं सटीक होने के लिए, यह डबल तत्व को दूसरे तत्व के रूप में रखने से कैसे अधिक या कम शक्तिशाली बना सकता है? या क्या यह दूसरा मामला है 'आप-क्या-क्या-में-कई-तरीकों'?

अर्पन

जवाब ठीक इस सवाल त्वरित जवाब यह है कि इस ढांचे में संरचना के बाहर एक सरणी के बजाय एक संकेतक की बजाय संरचना के अंदर डबल सरणी शामिल होगी। एक त्वरित उदाहरण के रूप में, आप इस उदाहरण के रूप में अपनी संरचना का उपयोग कर सकते हैं:

  struct s mystruct = malloc (sizeof (struct s) + 5 * sizeof (डबल)); S.n = 12; एसडी [0] = 4.0; एसडी [1] = 5.0; एसडी [2] = 6.0; एसडी [3] = 7.0; एसडी [4] = 8.0;  

और इतने पर - आप के बारे में ध्यान देने वाली सरणी के आकार को आवंटन में शामिल किया गया है, और फिर आप इसे किसी भी सरणी की तरह उपयोग कर सकते हैं। आमतौर पर इस तरह की संरचना में संरचना के भाग के रूप में आकार होता है, क्योंकि + प्रकार की सरणी के माध्यम से s को छोड़ने के लिए + चाल का उपयोग करना जरूरी इस स्थिति से जटिल होगा।

आपके अतिरिक्त प्रश्न के लिए, यह कैसे [तत्व] दूसरे तत्व के रूप में रखने से किसी भी अधिक या कम शक्तिशाली का निर्माण करता है? 'यह अब शक्तिशाली नहीं है, लेकिन आप' टी को एक संकेतक रखने की आवश्यकता है, ताकि आप कम से कम उस जगह को बचा सकें - जब भी आप संरचना को कॉपी कर रहे हों, आप सरणी की प्रतिलिपि बनाने की बजाए सरणी की प्रतिलिपि बनाते हैं- एक सूक्ष्म अंतर कभी-कभी, लेकिन बहुत महत्वपूर्ण अन्य टाइम्स। 'आप-कर-यह-में-कई-तरीकों' शायद एक अच्छा स्पष्टीकरण है, लेकिन ऐसे मामले हैं जहां आप विशेष रूप से एक डिज़ाइन या अन्य चाहते हैं।


Comments

Popular posts from this blog

windows - Heroku throws SQLITE3 Read only exception -

lex - Building a lexical Analyzer in Java -

python - rename keys in a dictionary -