Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C/C++ में डैंगलिंग, वॉयड, नल और वाइल्ड पॉइंटर्स

डैंगलिंग पॉइंटर

डैंगलिंग पॉइंटर एक ऐसा पॉइंटर है जो उस मेमोरी लोकेशन की ओर इशारा करता है जिसे मुक्त (या डिलीट) कर दिया गया है। ऐसे विभिन्न तरीके हैं जहां पॉइंटर डैंगलिंग पॉइंटर के रूप में कार्य करता है।

फंक्शन कॉल

लोकल वेरिएवल की ओर इशारा करने वाला पॉइंटर डैंगलिंग हो जाता है जब लोकल वेरिएवल स्टैटिक नहीं होता।

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;
}
  1. - C/C++ में malloc() और free() कैसे काम करते हैं?

    malloc() malloc() फ़ंक्शन का उपयोग अनुरोधित आकार के बाइट्स आवंटित करने के लिए किया जाता है और यह आवंटित मेमोरी के पहले बाइट का पॉइंटर लौटाता है। यदि यह विफल होता है तो यह नल पॉइंटर लौटाता है। C में सिंटैक्स pointer_name = (cast-type*) malloc(size); पैरामीटर्स: pointer_name - पॉइंटर को दिया गया को

  1. - C/C++ में isalpha() और isdigit() फ़ंक्शन्स

    isalpha() isalpha() फ़ंक्शन का उपयोग यह जांचने के लिए किया जाता है कि कोई कैरेक्टर अल्फाबेट है या नहीं। यह फ़ंक्शन ctype.h हेडर फ़ाइल में घोषित है। यदि आर्गुमेंट अल्फाबेट है तो यह एक इंटीजर मान लौटाता है, अन्यथा यह शून्य लौटाता है। C में सिंटैक्स int isalpha(int value); पैरामीटर्स: value - यह इंट

  1. - C/C++ पॉइंटर्स बनाम जावा रेफरेंसेस

    पॉइंटर्सC, C++ प्रोग्रामिंग भाषाओं में, एक पॉइंटर एक वेरिएबल है जो दूसरे वेरिएबल का पता रखता है। उदाहरण#include <iostream> using namespace std; int main() { // int वेरिएबल int i = 8; // पॉइंटर वेरिएबल int * pI; // i का पता उसके पॉइंटर को असाइन करें pI = &i; //