# पॉइंटर-टु-पॉइंटर और NULL — C प्रोग्रामिंग

Source: https://www.geekswithgeeks.com/hi/c/c-pointer-advanced

> एक स्तर और अप्रत्यक्षता, और पॉइंटर सुरक्षित रूप से कैसे विफल होते हैं।

## पॉइंटर का पॉइंटर

`int **pp` किसी `int *` का एड्रेस रखता है। एक बार डीरेफ़रेंस (`*pp`) करने पर आंतरिक पॉइंटर मिलता है; दो बार (`**pp`) करने पर असली int। यह डायनामिक 2D ऐरे और उन फंक्शनों में आम है जिन्हें कॉलर के पॉइंटर को दोबारा असाइन करना होता है।

## NULL मतलब "कहीं इशारा नहीं"

बिना इनिशियलाइज़ किया पॉइंटर कचरा रखता है। स्पष्ट रूप से `NULL` असाइन करने से वह "कहीं इशारा नहीं" के रूप में चिह्नित हो जाता है, और डीरेफ़रेंस से पहले जाँचना अच्छी आदत है।

```c
int *p = NULL;

if (p != NULL) {
    printf("%d\n", *p);
} else {
    printf("p points nowhere\n");
}
```

Output:

```
p points nowhere
```

## दो क्लासिक पॉइंटर बग

**वाइल्ड पॉइंटर**: वैध एड्रेस असाइन होने से पहले उपयोग किया गया। **डैंगलिंग पॉइंटर**: उस मेमोरी की ओर इशारा करता रहता है जो पहले ही मुक्त की जा चुकी है। दोनों अनिर्धारित व्यवहार देते हैं — हमेशा इनिशियलाइज़ करें, और free करने के बाद `NULL` सेट करें।
