पॉइंटर एक वेरिएबल है जिसका मान दूसरे वेरिएबल का पता होता है, यानी मेमोरी लोकेशन का सीधा पता। किसी भी वेरिएबल या कॉन्स्टेंट की तरह, इसका उपयोग करने से पहले पॉइंटर घोषित करना आवश्यक है।
मेमोरी प्रतिनिधित्व
int qty = 179;
मेमोरी में प्रतिनिधित्व: qty नामक वेरिएबल, पता 5000 पर, मान 179 संग्रहीत करता है।
पॉइंटर घोषित करना और आरंभ करना
int *p; // पॉइंटर घोषणा p = &qty; // एड्रेस ऑपरेटर (&) से आरंभीकरण
अब p में 5000 (qty का पता) है।
मान एक्सेस करना (डीरेफरेंसिंग)
इनडायरेक्शन ऑपरेटर (*) का उपयोग करके पते पर संग्रहीत मान एक्सेस करें:
n = *p; // n को 179 मान मिलता है
विभिन्न पॉइंटर ऑपरेशन्स
| ऑपरेशन | विवरण | उदाहरण |
|---|---|---|
| असाइनमेंट | पते को पॉइंटर में असाइन करना | p = &qty; |
| मान खोजना (डीरेफरेंसिंग) | * ऑपरेटर से मान प्राप्त करना | n = *p; |
| पॉइंटर का पता लेना | पॉइंटर स्वयं कहां संग्रहीत है | &p |
| पॉइंटर में इंटीजर जोड़ना | p + n - n एलिमेंट्स आगे बढ़ता है | p + 3 (3 इंट आगे) |
| पॉइंटर इन्क्रीमेंट | सरणी में अगला एलिमेंट | p++ या ++p |
| पॉइंटर से इंटीजर घटाना | p - n - n एलिमेंट्स पीछे | p - 2 |
| पॉइंटर डिक्रीमेंट | पिछला एलिमेंट | p-- या --p |
| पॉइंटर्स घटाना | दो पॉइंटर्स का अंतर (एलिमेंट्स की संख्या) | p2 - p1 |
| तुलना | रिलेशनल ऑपरेटर्स से पते तुलना | p1 < p2 |
उदाहरण प्रोग्राम
#include <stdio.h>
int main() {
int x, y;
int *p; // पॉइंटर घोषणा
x = 10;
p = &x; // पते को असाइन करना
y = *p; // मान खोजना (डीरेफरेंसिंग)
printf("Value of x = %d\n", x);
printf("Address of x = %p\n", (void*)&x);
printf("Value via pointer = %d\n", *p);
printf("Address via pointer = %p\n", (void*)p);
printf("Value of x in y = %d\n", y);
*p = 25; // पॉइंटर के माध्यम से मान बदलना
printf("Now x = %d\n", x);
return 0;
}
आउटपुट
Value of x = 10 Address of x = 0x7ffee4b8c9ac Value via pointer = 10 Address via pointer = 0x7ffee4b8c9ac Value of x in y = 10 Now x = 25
पॉइंटर्स के साथ सामान्य समस्याएं
- अनइनिशियलाइज़्ड पॉइंटर (वाइल्ड पॉइंटर) - यादृच्छिक पते पर इंगित करता है, क्रैश का कारण बनता है।
- डैंगलिंग पॉइंटर - मुक्त की गई मेमोरी को इंगित करता है।
- मेमोरी लीक - आवंटित मेमोरी मुक्त नहीं करना।
- बफर ओवरफ्लो - सीमा से बाहर लिखना।
- नल पॉइंटर डीरेफरेंस - NULL पॉइंटर को डीरेफरेंस करना।
सर्वोत्तम अभ्यास
- पॉइंटर्स को हमेशा इनिशियलाइज़ करें:
int *p = NULL;याint *p = &var; - डीरेफरेंस करने से पहले NULL चेक करें।
mallocके बादfreeका उपयोग करें।- मुक्त करने के बाद पॉइंटर को
NULLसेट करें। - सरणी बाउंड्स चेक करें।