एक गैर-कॉन्स्ट पॉइंटर के माध्यम से एक कॉन्स्ट को संशोधित करना
सी में, एक कॉन्स्ट वेरिएबल को एक बार आरंभ करने के बाद संशोधित नहीं किया जा सकता है। हालाँकि, कुछ परिदृश्यों में, ऐसा प्रतीत हो सकता है कि एक स्थिरांक चर बदल दिया गया है। निम्नलिखित कोड पर विचार करें:
const int e = 2;
int* w = (int*)&e; // (1)
*w = 5; // (2)
cout यदि आप यह कोड चलाते हैं, तो आपको एक अप्रत्याशित व्यवहार दिखाई देगा:
5
2
हालाँकि *w को (2) में 5 में बदल दिया गया था, e अभी भी 2 का अपना मूल मान रखता है। यह प्रतीत होता है कि विरोधाभासी व्यवहार निम्नलिखित कारकों से उत्पन्न होता है:
- (1 ) एक कॉन्स्ट पॉइंटर (w) को डीरेफ़रेंस करने से संशोधन की अनुमति मिलती है।
- (2) संशोधित मान को w द्वारा इंगित मेमोरी स्थान में संग्रहीत किया जाता है, जो इस मामले में मेमोरी स्थान है जहां e संग्रहीत है।
- हालाँकि, कंपाइलर कोड को अनुकूलित करता है, ई को कंपाइल-टाइम स्थिरांक के रूप में मानता है और रनटाइम पर इसका मूल्यांकन नहीं करता है।
परिणामस्वरूप, जब रनटाइम पर *w का मूल्यांकन किया जाता है, तो यह वापस आ जाता है संशोधित मान (5). हालाँकि, जब संकलन समय पर e का मूल्यांकन किया जाता है, तो इसका मूल मान (2) उपयोग किया जाता है।
इस व्यवहार को C में अपरिभाषित व्यवहार के रूप में जाना जाता है। किसी कॉन्स्ट वेरिएबल को प्रत्यक्ष या अप्रत्यक्ष रूप से संशोधित करने से अप्रत्याशित परिणाम होते हैं, और ऐसी स्थितियों में सावधानी बरती जानी चाहिए।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3