Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C में const वेरिएबल को कैसे संशोधित करें


const वेरिएबल को सीधे संशोधित करना कंपाइल एरर देता है, लेकिन पॉइंटर के माध्यम से अप्रत्यक्ष संशोधन संभव है (हालांकि यह **अनडिफाइंड बिहेवियर** है)।

सीधा संशोधन (एरर)

#include <stdio.h>

int main() {
    const int x = 10;
    x = 15;  // Error: assignment of read-only variable 'x'
    return 0;
}

पॉइंटर के माध्यम से (काम कर सकता है लेकिन UB)

#include <stdio.h>

int main() {
    const int x = 10;
    int *ptr = (int*)&x;  // const कास्ट अवे - खतरनाक!
    
    printf("Before: x = %d\n", x);
    *ptr = 15;
    printf("After: x = %d\n", x);  // 15 प्रिंट हो सकता है
    
    return 0;
}

आउटपुट

Before: x = 10
After: x = 15

क्यों यह खतरनाक है

  • अनडिफाइंड बिहेवियर: C मानक के अनुसार, const ऑब्जेक्ट को संशोधित करना UB है।
  • ऑप्टिमाइज़ेशन: कंपाइलर मान सकता है कि const वेरिएबल नहीं बदलता और ऑप्टिमाइज़ कर सकता है।
  • रीड-ओनली मेमोरी: ग्लोबल/स्टेटिक const वेरिएबल्स .rodata सेक्शन में रखे जा सकते हैं - लिखने पर सेगफॉल्ट (हार्डवेयर प्रोटेक्शन)।

उदाहरण जहां यह फेल होता है

const int x = 10;  // ग्लोबल - .rodata में जा सकता है

int main() {
    int *ptr = (int*)&x;
    *ptr = 15;  // Segmentation fault संभावित!
    return 0;
}

सही विकल्प

  • यदि मान बदलना है, तो const न लगाएं।
  • C++ में mutable कीवर्ड (क्लास मेम्बर्स के लिए) उपयोग करें।
  • कॉन्स्टनेस कास्ट अवे करने के लिए const_cast (C++) उपयोग करें, लेकिन केवल जब आप **जानते हों** कि ऑब्जेक्ट मूल रूप से नॉन-कॉन्स्ट था।
  1. - PHP में ग्लोबल वेरिएबल कैसे घोषित करें

    PHP में ग्लोबल वेरिएबल एक **ग्लोबल वेरिएबल** प्रोग्राम के किसी भी भाग में एक्सेस की जा सकती है। हालांकि, इसे **संशोधित** करने के लिए, उस फ़ंक्शन में स्पष्ट रूप से global कीवर्ड का उपयोग करके ग्लोबल घोषित किया जाना चाहिए जिसमें इसे संशोधित किया जाना है। उदाहरण 1: बेसिक ग्लोबल वेरिएबल <?php $val

  1. - C# में Variables को Initialize कैसे करें?

    Variable एक Name है जिसे Storage Area दिया जाता है जिसे हमारे Programs Manipulate कर सकते हैं।C# में प्रत्येक Variable का एक Specific Type होता है, जो Variable की Memory के Size और Layout, उस Memory में Store की जा सकने वाली Values की Range और Variable पर Apply किए जा सकने वाले Operations के Set को

  1. - C# में वेरिएबल कैसे परिभाषित करें?

    C# में प्रत्येक वेरिएबल का एक विशिष्ट प्रकार होता है, जो वेरिएबल की मेमोरी के आकार और लेआउट, उस मेमोरी में स्टोर किए जा सकने वाले मानों की रेंज और वेरिएबल पर लागू किए जा सकने वाले ऑपरेशन्स के सेट को निर्धारित करता है।वेरिएबल के लिए सिंटैक्स:<डेटा_टाइप> <वेरिएबल_लिस्ट>;आइए एक उदाहरण देखें