BCA / B.Tech 9 min read

Pointer in Hindi

Pointer in Data Structure in Hindi | डाटा स्ट्रक्चर में  पॉइंटर हिंदी में  :


पॉइंटर एक विशेष प्रकार का वेरिएबल होता है जो किसी अन्य वेरिएबल के मेमोरी एड्रेस को स्टोर करता है। आमतौर पर, जब हम किसी वेरिएबल को डिक्लेयर करते हैं, तो वह किसी मेमोरी लोकेशन पर स्टोर होता है, और पॉइंटर उसी मेमोरी लोकेशन के एड्रेस को रखता है। यह C और C++ जैसी भाषाओं 
में एक महत्वपूर्ण अवधारणा है, जिसका उपयोग मेमोरी को डायनामिक रूप से प्रबंधित करने के लिए किया जाता है।

पॉइंटर C और C++ जैसी भाषाओं में एक बहुत ही महत्वपूर्ण अवधारणा है। यह हमें मेमोरी को सीधे प्रबंधित करने की अनुमति देता है, जिससे हम अधिक जटिल और कुशल प्रोग्राम बना सकते हैं। 

विभिन्न प्रकार के पॉइंटर्स के उपयोग और उनके फायदे एवं हानियाँ समझकर हम पॉइंटर  को सही तरीके से इस्तेमाल कर सकते हैं।

 Syntax of Pointer in Data Structure in Hindi | पॉइंटर का सिंटैक्स :

data_type *pointer_name;
data_type: वह डेटा प्रकार जिसे पॉइंटर पॉइंट कर रहा है।
*: यह संकेत करता है कि यह वेरिएबल एक पॉइंटर है।
pointer_name: पॉइंटर वेरिएबल का नाम।
उदाहरण:

int *p; // यह एक पॉइंटर है जो integer डेटा टाइप के वेरिएबल को पॉइंट करता है।

Pointer Operations in Data Structure in Hindi | पॉइंटर ऑपरेशंस :

Address of operator (&): इसका उपयोग किसी वेरिएबल का एड्रेस प्राप्त करने के लिए किया जाता है।
Dereference operator (*): इसका उपयोग पॉइंटर द्वारा पॉइंट किए गए वेरिएबल के वैल्यू तक पहुंचने के लिए किया जाता है।
उदाहरण:

int a = 10;
int *p;
p = &a; // 'a' का एड्रेस 'p' में स्टोर होता है।
printf("%d", *p); // यह 'a' का वैल्यू प्रिंट करेगा, यानी 10।

 Types of Pointers in Data Structure in Hindi | पॉइंटर के प्रकार :

पॉइंटर के कई प्रकार होते हैं जो कि विभिन्न उपयोगों के आधार पर होते हैं:

1. नल पॉइंटर (Null Pointer)

नल पॉइंटर वह पॉइंटर होता है, जो किसी भी वैध मेमोरी एड्रेस को पॉइंट नहीं करता। इसका उपयोग तब किया जाता है जब हमें किसी पॉइंटर को प्रारंभिक अवस्था में रखना होता है।


int *p = NULL;
इसका उपयोग यह जांचने के लिए किया जाता है कि पॉइंटर किसी वैध मेमोरी को पॉइंट कर रहा है या नहीं।

2. जंगली पॉइंटर (Dangling Pointer)

जंगली पॉइंटर वह पॉइंटर होता है जो किसी मेमोरी लोकेशन को पॉइंट करता है जिसे फ्री या डी-एलोकेट कर दिया गया हो। जंगली पॉइंटर से पहुंचने पर अज्ञात व्यवहार उत्पन्न हो सकता है।

उदाहरण:


int *p;
{
    int a = 10;
    p = &a;
}
// अब 'a' मेमोरी से हट चुका है, लेकिन 'p' अभी भी उसे पॉइंट कर रहा है।

3. जेनरिक पॉइंटर (Generic Pointer)

जेनरिक पॉइंटर वह पॉइंटर होता है जिसका कोई निश्चित डेटा प्रकार नहीं होता है। इसे void * के रूप में परिभाषित किया जाता है और इसका उपयोग किसी भी प्रकार के डेटा को पॉइंट करने के लिए किया जा सकता है।


void *ptr;
int a = 10;
ptr = &a; // 'ptr' अब integer डेटा को पॉइंट कर रहा है।

4. कंसटेंट पॉइंटर (Constant Pointer)

कंसटेंट पॉइंटर वह पॉइंटर होता है जिसकी पॉइंट की गई वैल्यू को बदला नहीं जा सकता। यह दो प्रकार के होते हैं:

Pointer to Constant: पॉइंटर की पॉइंट की गई वैल्यू को नहीं बदला जा सकता।

int a = 10;
const int *p = &a; // अब 'p' की वैल्यू नहीं बदली जा सकती।
Constant Pointer: पॉइंटर का एड्रेस नहीं बदला जा सकता।

int a = 10;
int *const p = &a; // अब 'p' किसी अन्य वेरिएबल को पॉइंट नहीं कर सकता।

5. फ़ंक्शन पॉइंटर (Function Pointer)

फ़ंक्शन पॉइंटर वह पॉइंटर होता है जो किसी फ़ंक्शन के एड्रेस को पॉइंट करता है। इसका उपयोग किसी फ़ंक्शन को कॉल करने के लिए किया जाता है, विशेषकर जब हमें रन-टाइम पर फ़ंक्शन को बदलना होता है।

उदाहरण:

void func() {
    printf("Hello, World!");
}

void (*fptr)(); // Function pointer declaration
fptr = func; // Assigning function address
fptr(); // Calling the function using pointer

6. डबल पॉइंटर (Double Pointer)

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

int a = 10;
int *p = &a;
int **pp = &p; // Double pointer pointing to 'p'

7. डायनामिक पॉइंटर (Dynamic Pointer)

डायनामिक पॉइंटर का उपयोग डायनामिक मेमोरी एलोकेशन के लिए किया जाता है। इसमें malloc(), calloc(), और free() जैसी फ़ंक्शन्स का उपयोग होता है।

int *p;
p = (int *)malloc(sizeof(int)); // Memory allocation
*p = 20; // Assigning value
free(p); // Memory deallocation

 Advantages of Pointer in Data Structure in Hindi | पॉइंटर के लाभ :

  • मेमोरी प्रबंधन: डायनामिक मेमोरी एलोकेशन के माध्यम से हम आवश्यकता के अनुसार मेमोरी को मैनेज कर सकते हैं।
  • फ़ंक्शन पासिंग: फ़ंक्शन को पॉइंटर के माध्यम से पास करने पर कम मेमोरी उपयोग होती है।
  • एरे और स्ट्रिंग्स में दक्षता: पॉइंटर्स एरे और स्ट्रिंग्स को अधिक कुशलता से प्रबंधित करते हैं।
  • कम्प्लेक्स डेटा स्ट्रक्चर: पॉइंटर का उपयोग लिंक्ड लिस्ट, ट्री, ग्राफ़ जैसे जटिल डेटा स्ट्रक्चर्स में किया जाता है।

Disadvantages of Pointer in Data Structure in Hindi | पॉइंटर की हानियाँ :

  • कॉम्प्लेक्सिटी: पॉइंटर को सही से समझना और उपयोग करना जटिल हो सकता है।
  • गलत पॉइंटर एक्सेस: गलत पॉइंटर एक्सेस से सेगमेंटेशन फॉल्ट या प्रोग्राम क्रैश हो सकता है।
  • जंगली पॉइंटर: यदि मेमोरी ठीक से फ्री नहीं की गई तो जंगली पॉइंटर की समस्या उत्पन्न हो सकती है।
  • मेमोरी लीक: अगर डायनामिक मेमोरी को सही से फ्री नहीं किया गया, तो मेमोरी लीक हो सकता है।