2012-08-07 17 views
6

यदि मैं कॉन्स्ट मानों की वैश्विक सरणी बना देता हूं, उदा।कॉन्स मानों के लिए कॉन्स्ट एरे पॉइंटर

const int SOME_LIST[SOME_LIST_SIZE] = {2, 3, 5, 7, 11}; 

क्या SOME_LIST किसी भी तरह से संशोधित किया जा सकता है?

मैं इस तरह के SOME_LIST अंक को एक कॉन्स मेमोरी लोकेशन में कैसे लिख सकता हूं, और एक कॉन्स पॉइंटर स्वयं है (यानी कहीं और इंगित नहीं किया जा सकता है)?

+3

'SOME_LIST' किसी भी तरह से संशोधित नहीं किया जा सकता –

+3

' SOME_LIST' [एक सरणी, सूचक नहीं है] (http: //stackoverflow.com/questions/4810664/), इसलिए चिंता करने के लिए केवल एक स्तर का स्थिरता है। – fredoverflow

उत्तर

8

आपके पास जिस तरह से यह सही है।

इसके अलावा, आप SOME_LIST_SIZE प्रदान करने के लिए जरूरत नहीं है, सी ++ स्वचालित रूप से प्रारंभकर्ता से बाहर निकल जाएगा।

+0

बस पुष्टि करने के लिए, अगर मैंने इसे कहीं और इंगित करने की कोशिश की है, तो एक कंपाइलर त्रुटि फेंक दी जाएगी? – Darthfett

+1

@ डार्थफेट: हाँ, यह होगा। कोई विशेष रूप से दुर्भावनापूर्ण उस पर 'const_cast' का उपयोग करने में सक्षम हो सकता है, लेकिन एक पॉइंटर के रूप में, मैं निश्चित रूप से निश्चित हूं कि अपरिभाषित व्यवहार क्षेत्र में चल रहा है। – KRyan

+3

बेशक: एक सरणी को स्थानांतरित नहीं किया जा सकता है, और 'स्मृति' शिकायत करेगा कि आप इसे 'कॉन्स्ट' सूचक दे ​​रहे हैं। जाहिर है आप इस अंतिम सुरक्षा को 'const_cast' के साथ बाईपास कर सकते हैं, लेकिन फिर आप यूबी-भूमि में जाते हैं (इसके परिणामस्वरूप रनटाइम पर क्रैश हो सकता है)। –

11

पॉइंटर्स के 3 मुख्य उदाहरण हैं जिनमें "कॉन्स्ट" कीवर्ड शामिल है। (यह link देखें)

सबसे पहले: एक स्थिर चर पर एक सूचक को घोषित करना। पॉइंटर स्थानांतरित हो सकता है, और यह बदल रहा है कि क्या बदल रहा है, लेकिन परिवर्तनीय संशोधित नहीं किया जा सकता है।

const int* p_int; 

दूसरा: एक चर के लिए एक "अप्राप्य" पॉइंटर घोषित करना। सूचक 'निश्चित' है लेकिन डेटा संशोधित किया जा सकता है। यह सूचक घोषित और असाइन किया जाना चाहिए, अन्यथा यह न्यूल को इंगित कर सकता है, और वहां तय हो सकता है।

int my_int = 100; 
int* const constant_p_int = &my_int; 

तीसरा: निरंतर डेटा के लिए एक अचल सूचक की घोषणा।

const int my_constant_int = 100; (OR "int const my_constant_int = 100;") 
const int* const constant_p_int = &my_constant_int; 

आप इसका भी उपयोग कर सकते हैं।

int const * const constant_p_int = &my_constant_int; 

एक और अच्छा संदर्भ here देखें। मुझे आशा है कि इससे मदद मिलेगी, हालांकि यह लिखते हुए मुझे एहसास हुआ कि आपका प्रश्न पहले से ही उत्तर दिया गया है ...

+1

मैं पॉइंटर्स पर कॉन्स के उपयोग से परिचित था, यह केवल सरणी थी कि मुझे अनिश्चितता थी। अभी भी बहुत अच्छी चीजें जानना है। :) – Darthfett

+0

हां, मुझे हाल ही में इसके चारों ओर अपना सिर मिल रहा था, इसलिए सोचा कि मैं साझा कर सकता हूं (: – user3728501

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

  • कोई संबंधित समस्या नहीं^_^