पाठ 23 / 36
पॉइंटर-टु-पॉइंटर और NULL
एक स्तर और अप्रत्यक्षता, और पॉइंटर सुरक्षित रूप से कैसे विफल होते हैं।
पॉइंटर का पॉइंटर
int **pp किसी int * का एड्रेस रखता है। एक बार डीरेफ़रेंस (*pp) करने पर आंतरिक पॉइंटर मिलता है; दो बार (**pp) करने पर असली int। यह डायनामिक 2D ऐरे और उन फंक्शनों में आम है जिन्हें कॉलर के पॉइंटर को दोबारा असाइन करना होता है।
NULL मतलब "कहीं इशारा नहीं"
बिना इनिशियलाइज़ किया पॉइंटर कचरा रखता है। स्पष्ट रूप से NULL असाइन करने से वह "कहीं इशारा नहीं" के रूप में चिह्नित हो जाता है, और डीरेफ़रेंस से पहले जाँचना अच्छी आदत है।
int *p = NULL;
if (p != NULL) {
printf("%d\n", *p);
} else {
printf("p points nowhere\n");
}
Output:
p points nowhere
दो क्लासिक पॉइंटर बग
वाइल्ड पॉइंटर: वैध एड्रेस असाइन होने से पहले उपयोग किया गया। डैंगलिंग पॉइंटर: उस मेमोरी की ओर इशारा करता रहता है जो पहले ही मुक्त की जा चुकी है। दोनों अनिर्धारित व्यवहार देते हैं — हमेशा इनिशियलाइज़ करें, और free करने के बाद NULL सेट करें।