कॉन्स्टेंट पॉइंटर (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 *pint 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 के लिए