पॉइंटर एक वेरिएबल है जो दूसरे वेरिएबल का पता संग्रहीत करता है।
पॉइंटर्स की विशेषताएं
- मेमोरी स्पेस बचाता है।
- मेमोरी लोकेशन तक सीधी पहुंच के कारण एक्जीक्यूशन समय तेज होता है।
- पॉइंटर की मदद से मेमोरी कुशलतापूर्वक एक्सेस होती है।
- मेमोरी डायनामिक रूप से आवंटित और डीआवंटित होती है।
- पॉइंटर्स डेटा स्ट्रक्चर्स के साथ उपयोग किए जाते हैं।
सिंटैक्स
pointer = &variable;
उदाहरण प्रोग्राम
#include <stdio.h>
int main() {
int x = 40; // वेरिएबल घोषणा
int *p; // पॉइंटर वेरिएबल घोषणा
p = &x; // वेरिएबल x का पता पॉइंटर p में स्टोर करें
printf("Address in p: %p\n", (void*)p); // पता एक्सेस करना
printf("Value in p: %d\n", *p); // मान एक्सेस करना (डीरेफरेंसिंग)
return 0;
}
आउटपुट
Address in p: 0x7ffee4b8c9ac Value in p: 40
ऑपरेटर्स
| ऑपरेटर | उद्देश्य |
|---|---|
| * (एस्टेरिस्क) | दो उद्देश्य: 1) पॉइंटर घोषणा (int *p), 2) डीरेफरेंसिंग - संदर्भित वेरिएबल का मान लौटाता है (*p) |
| & (एम्परसैंड) | एक उद्देश्य: वेरिएबल का पता लौटाता है (&x) |
महत्वपूर्ण कॉन्सेप्ट्स
1. पॉइंटर और सरणी
int arr[5] = {10, 20, 30, 40, 50};
int *p = arr; // arr का बेस पता (=&arr[0])
p[2] == *(p+2) == arr[2] == 30 // सभी समान
2. पॉइंटर अंकगणित
int *p = &arr[0]; p++; // अगला इंट (4 बाइट्स आगे) p += 3; // 3 इंट्स आगे p--; // पिछला इंट
3. पॉइंटर टू पॉइंटर
int x = 10;
int *p = &x;
int **pp = &p;
printf("%d", **pp); // 10
4. कॉन्स्ट पॉइंटर्स
int value = 10; const int *p1 = &value; // पॉइंटर टू कॉन्स्ट: *p1 नहीं बदल सकते int *const p2 = &value; // कॉन्स्ट पॉइंटर: p2 नहीं बदल सकते const int *const p3 = &value; // दोनों कॉन्स्ट
5. डायनामिक मेमोरी आवंटन
int *p = malloc(10 * sizeof(int));
if(p) {
// उपयोग करें
free(p);
p = NULL; // डैंगलिंग पॉइंटर रोकें
}
सामान्य गलतियां
- अनइनिशियलाइज़्ड पॉइंटर डीरेफरेंस:
int *p; *p = 10;(क्रैश) - मुक्त मेमोरी एक्सेस:
free(p); *p = 10;(डैंगलिंग) - मेमोरी लीक:
p = malloc(...); p = malloc(...);(पहला ब्लॉक खो गया) - गलत फॉर्मेट स्पेसिफायर:
printf("%d", p);→printf("%p", (void*)p);उपयोग करें
सर्वोत्तम अभ्यास
- घोषणा पर इनिशियलाइज़ करें:
int *p = NULL; - डीरेफरेंस से पहले NULL चेक करें।
constसहीता का उपयोग करें।- आधुनिक C में
restrictकीवर्ड पर विचार करें।