डैंगलिंग पॉइंटर
डैंगलिंग पॉइंटर एक ऐसा पॉइंटर है जो उस मेमोरी लोकेशन की ओर इशारा करता है जिसे मुक्त (या डिलीट) कर दिया गया है। ऐसे विभिन्न तरीके हैं जहां पॉइंटर डैंगलिंग पॉइंटर के रूप में कार्य करता है।
फंक्शन कॉल
लोकल वेरिएवल की ओर इशारा करने वाला पॉइंटर डैंगलिंग हो जाता है जब लोकल वेरिएवल स्टैटिक नहीं होता।
int *show(void) {
int n = 76; /* ... */
return &n;
}
आउटपुट
इस प्रोग्राम का आउटपुट गार्बेज एड्रेस होगा।
मेमोरी का डी-एलोकेशन
#include <stdlib.h>
#include <stdio.h>
int main() {
float *p = (float *)malloc(sizeof(float));
//डायनामिक मेमोरी एलोकेशन।
free(p);
//free() कॉल करने के बाद p डैंगलिंग पॉइंटर बन जाता है
p = NULL;
//अब p डैंगलिंग पॉइंटर नहीं है।
}
वेरिएवल स्कोप से बाहर जाता है
int main() {
int *p //कुछ कोड//
{
int c; p=&c;
}
//कुछ कोड//
//p यहां डैंगलिंग पॉइंटर है।
}
वॉयड पॉइंटर
C में वॉयड पॉइंटर एक ऐसा पॉइंटर है जो किसी डेटा टाइप से जुड़ा नहीं होता। यह स्टोरेज में किसी डेटा लोकेशन की ओर इशारा करता है यानी वेरिएवल्स के पते की ओर इशारा करता है। इसे जनरल पर्पस पॉइंटर भी कहा जाता है।
इसकी कुछ सीमाएं हैं
इसके ठोस आकार के कारण वॉयड पॉइंटर का पॉइंटर अंकगणित संभव नहीं है।
इसे डीरेफरेंस के रूप में उपयोग नहीं किया जा सकता।
यहां एक सरल उदाहरण है
#include<stdlib.h>
int main() {
int a = 7;
float b = 7.6;
void *p;
p = &a;
printf("Integer variable is = %d", *( (int*) p) );
p = &b;
printf("\nFloat variable is = %f", *( (float*) p) );
return 0;
}
आउटपुट
Integer variable is = 7
Float variable is = 7.600000
एल्गोरिदम
Begin
एक वेरिएवल a को इंटीजर मान से और वेरिएवल b को फ्लोट मान से आरंभ करें।
एक वॉयड पॉइंटर p घोषित करें।
(int*)p = वॉयड का टाइप कास्टिंग।
p = &b का अर्थ है वॉयड पॉइंटर p अब फ्लोट है।
(float*)p = वॉयड का टाइप कास्टिंग।
मान प्रिंट करें।
End.
नल पॉइंटर
नल पॉइंटर एक ऐसा पॉइंटर है जो कुछ भी नहीं दर्शाता। नल पॉइंटर के कुछ उपयोग हैं:
पॉइंटर वेरिएवल को आरंभ करने के लिए जब वह पॉइंटर वेरिएवल अभी तक किसी वैध मेमोरी एड्रेस को असाइन नहीं किया गया है।
एक फंक्शन आर्गुमेंट को नल पॉइंटर पास करने के लिए यदि हम कोई वैध मेमोरी एड्रेस पास नहीं करना चाहते।
किसी भी पॉइंटर वेरिएवल को एक्सेस करने से पहले नल पॉइंटर की जांच करने के लिए। ताकि हम पॉइंटर से संबंधित कोड में त्रुटि प्रबंधन कर सकें, जैसे पॉइंटर वेरिएवल को केवल तभी डीरेफरेंस करें जब यह NULL न हो।
उदाहरण
#include<iostream>
#include <stdio.h>
int main() {
int *p= NULL;//पॉइंटर को नल के रूप में आरंभ करें।
printf("The value of pointer is %u",p);
return 0;
}
आउटपुट
The value of pointer is 0.
वाइल्ड पॉइंटर
वाइल्ड पॉइंटर्स वे पॉइंटर्स हैं जो किसी मनमाने मेमोरी लोकेशन की ओर इशारा करते हैं। (नल भी नहीं)
int main() {
int *ptr; //वाइल्ड पॉइंटर
*ptr = 5;
}