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

C भाषा में कॉन्स्टेंट पॉइंटर (Pointer to Constant) क्या है?

कॉन्स्टेंट पॉइंटर (Pointer to Constant)

पॉइंटर टू कॉन्स्टेंट का अर्थ है: पॉइंटर जिस पते पर इंगित करता है, उस पते पर संग्रहीत मान को बदला नहीं जा सकता। पॉइंटर स्वयं किसी अन्य पते को इंगित कर सकता है, लेकिन मान केवल-पढ़ने योग्य (read-only) है।

घोषणा सिंटैक्स

const डेटा_प्रकार *पॉइंटर_नाम;
// या
डेटा_प्रकार const *पॉइंटर_नाम;

उदाहरण: const int *ptr; // कॉन्स्टेंट पूर्णांक को इंगित करने वाला पॉइंटर

प्रोग्राम 1: कॉन्स्टेंट पॉइंटर - मान बदलने का प्रयास (त्रुटि)

#include <stdio.h>

int main() {
    int var1 = 100;
    
    // कॉन्स्टेंट पूर्णांक को इंगित करने वाला पॉइंटर
    const int *ptr = &var1;
    
    // इंगित मान को संशोधित करने का प्रयास
    *ptr = 10;  // कंपाइल त्रुटि: असाइनमेंट ऑफ रीड-ओनली लोकेशन
    
    printf("%d\n", *ptr);
    return 0;
}

आउटपुट

त्रुटि: असाइनमेंट ऑफ रीड-ओनली लोकेशन '*ptr'

प्रोग्राम 2: const हटाने पर काम करता है

#include <stdio.h>

int main() {
    int var1 = 100;
    
    // सामान्य पॉइंटर (const नहीं)
    int *ptr = &var1;
    
    // मान संशोधित करें - ठीक है
    *ptr = 10;
    
    printf("मान: %d\n", *ptr);  // 10 प्रिंट करता है
    
    return 0;
}

आउटपुट

मान: 10

तीन प्रकार के पॉइंटर-कॉन्स्ट संयोजन

घोषणानामक्या स्थिर हैक्या बदल सकता है
const int *p
int const *p
पॉइंटर टू कॉन्स्टमान (*p)पॉइंटर (p)
int *const pकॉन्स्टेंट पॉइंटरपता (p)मान (*p)
const int *const pकॉन्स्टेंट पॉइंटर टू कॉन्स्टदोनोंकुछ नहीं

उदाहरण: प्रत्येक प्रकार

1. पॉइंटर टू कॉन्स्ट (मान स्थिर, पॉइंटर बदल सकता है)


const int *ptr = &a;
*ptr = 20;  // ❌ त्रुटि
ptr = &b;   // ✅ ठीक

2. कॉन्स्टेंट पॉइंटर (पता स्थिर, मान बदल सकता है)


int *const ptr = &a;
*ptr = 20;  // ✅ ठीक
ptr = &b;   // ❌ त्रुटि: असाइनमेंट ऑफ रीड-ओनली वेरिएबल

3. कॉन्स्टेंट पॉइंटर टू कॉन्स्ट (दोनों स्थिर)


const int *const ptr = &a;
*ptr = 20;  // ❌ त्रुटि
ptr = &b;   // ❌ त्रुटि

व्यावहारिक उपयोग: फ़ंक्शन पैरामीटर

जब आप चाहते हैं कि फ़ंक्शन सरणी/स्ट्रिंग पढ़े लेकिन संशोधित न करे:

// स्ट्रिंग केवल पढ़ी जाएगी, संशोधित नहीं
void printString(const char *str) {
    printf("%s\n", str);
    // str[0] = 'X';  // कंपाइल त्रुटि
}

// सरणी केवल पढ़ी जाएगी
int sumArray(const int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) sum += arr[i];
    return sum;
}

नियम: "दाएं से बाएं पढ़ें"


const int *p;       // p एक पॉइंटर है → int के लिए → जो const है
int *const p;       // p एक const पॉइंटर है → int के लिए
const int *const p; // p एक const पॉइंटर है → const int के लिए
  1. नेटवर्किंग में इंटरफेस और सर्विसेज का क्या अर्थ है? नेटवर्किंग में इंटरफेस और सर्विसेज का क्या अर्थ है?

    आम तौर पर एक नेटवर्क सर्विस एक ऐसा एप्लिकेशन होता है जो एप्लिकेशन लेयर और उससे ऊपर चलता है और कंप्यूटर नेटवर्किंग में उपयोग किया जाता है। नेटवर्क सर्विस डेटा स्टोरेज, मैनिपुलेशन, प्रेजेंटेशन और कम्युनिकेशन प्रदान करती है। इसे क्लाइंट-सर्वर आर्किटेक्चर या पीयर-टू-पीयर आर्किटेक्चर का उपयोग करके लागू

  1. - C भाषा में ऑड लूप्स (Odd Loops) का क्या अर्थ है?

    C प्रोग्रामिंग भाषा में, कंट्रोल स्टेटमेंट्स का उपयोग स्टेटमेंट्स के एक सेट को दोहराने के लिए किया जाता है। वे निम्नलिखित हैं: for लूप while लूप do-while लूप for लूप और while लूप में, कंडीशन उन बारों की संख्या निर्दिष्ट करती है जिनमें लूप निष्पादित हो सकता है। for लूप के लिए उदाहरण for (k = 1; k

  1. C प्रोग्रामिंग में स्टेटिक मेमोरी एलोकेशन का क्या अर्थ है? C प्रोग्रामिंग में स्टेटिक मेमोरी एलोकेशन का क्या अर्थ है?

    मेमोरी को निम्नलिखित दो तरीकों से एलोकेट किया जा सकता है: स्टेटिक मेमोरी एलोकेशन स्टेटिक वेरिएबल आवंटित स्थान के एक ब्लॉक में परिभाषित होता है, जिसका आकार निश्चित होता है। एक बार एलोकेट होने के बाद, इसे कभी फ्री नहीं किया जा सकता। प्रोग्राम में घोषित वेरिएबल के लिए मेमोरी एलोकेट की जाती है। एड्र