इस सवाल का पहले से ही एक उत्तर है: < / P>
- 9 उत्तर
int लंबाई = 5; Int हाय [लंबाई];
बनाम
int लंबाई = 5; Int * hi = नया int [लंबाई];
मुझे सिखाया गया था कि कम्पाइलर सी में शिकायत करते हैं जब भी आप स्थैतिक रूप से एरेज़ डब्ल्यू / आकार आवंटित करने की कोशिश करते हैं जो स्थिर नहीं है। इसलिए यदि आपको कभी अज्ञात आकार की सरणी की आवश्यकता होती है, तो आपको गतिशील रूप से स्मृति आवंटित करने की आवश्यकता होती है। हालांकि, अब कि वहाँ compilers है कि पहले उदाहरण की अनुमति है, वे वास्तव में क्या कर रहे हैं? क्या वे अभी भी डेटा सेगमेंट में जा रहे हैं, या वे ढेर पर नहीं जा रहे हैं? अगर वे ढेर पर जा रहे हैं, तो उदाहरणों के बीच अंतर क्या है, और मुझे अभी भी 2 उदाहरण पर क्यों हटा देना होगा, लेकिन पहला उदाहरण नहीं है?
हालांकि, अब ऐसा है कि पहले उदाहरण की अनुमति देने वाले कंपाइलर्स हैं, वे क्या कर रहे हैं ? क्या वे अभी भी डेटा सेगमेंट में जा रहे हैं, या वे ढेर पर नहीं जा रहे हैं? अगर वे ढेर पर जा रहे हैं, तो उदाहरणों के बीच अंतर क्या है, और मुझे अभी भी 2 उदाहरण पर क्यों हटा देना होगा, लेकिन पहला उदाहरण नहीं?
पहले एक स्थिर चर (आमतौर पर स्टैक * पर) घोषित कर रहा है जो कोड ब्लॉक के अंत में मर जाएगा जिसमें यह परिभाषित किया जाता है
दूसरा एक गतिशील रूप से एक चर (आमतौर पर ढेर * पर) को आवंटित करता है जिसका अर्थ है कि आप यह तय कर सकते हैं कि इसे कैसे
हटाएं [] से हटाना है? आपको ऐसा करना याद रखना चाहिए)।
सरणी के संदर्भ में, दोनों के बीच का मुख्य अंतर यह है कि दूसरे को आसानी से स्मृति को हटाना (उदाहरण के लिए पिछले सरणी) को हटाकर और फिर से बदल दिया जा सकता है इसे अभी भी गतिशील रूप से आवंटित किए गए एक नए सरणी को इंगित करें।
int * arr = new int [5]; [...] हटाएं [] arr; Arr = नया इंट [10];
स्टेटिक एरेज़
int hi [length] आमतौर पर एक
const int * घोषित करते हैं, जिसे इसके बजाय संशोधित नहीं किया जाना चाहिए। यह कहने के लिए है कि सी ++ कंटेनरों का एक पूरा सेट प्रदान करता है जो सरणियों के स्थान पर / का उपयोग किया जा सकता है।
[*] नोट: सी ++ मानक निर्दिष्ट नहीं करता है कि गतिशील या स्थैतिक मेमोरी।
No comments:
Post a Comment