पॉइंटर (Pointer)
परिभाषा (Definition):
Pointer एक ऐसा वेरिएबल (variable) है जो किसी दूसरे वेरिएबल का मेमोरी एड्रेस (memory address) स्टोर करता है। सामान्य वेरिएबल मान (value) को स्टोर करता है, जबकि pointer किसी मान का पता (address) स्टोर करता है।
उदाहरण:
यहाँ,
-
a→ सामान्य वेरिएबल -
p→ पॉइंटर वेरिएबल -
&a→ वेरिएबलaका एड्रेस
इसलिए,pमेंaका मेमोरी एड्रेस स्टोर होता है।
Pointer में प्रयोग होने वाले प्रतीक (Symbols Used in Pointer)
| Symbol | Meaning |
|---|---|
& | Address-of ऑपरेटर (किसी वेरिएबल का एड्रेस प्राप्त करने के लिए) |
* | Value-at ऑपरेटर (किसी एड्रेस पर स्थित मान प्राप्त करने या बदलने के लिए) |
उदाहरण:
📘 Pointer की घोषणा और आरंभिककरण (Declaration and Initialization)
Declaration:
Pointer घोषित करने के लिए वेरिएबल के नाम से पहले * लगाया जाता है।
सिंटैक्स:
उदाहरण:
Initialization:
Pointer को किसी वेरिएबल के एड्रेस से प्रारंभ (initialize) किया जाता है।
उदाहरण:
Program
आउटपुट (Output):
C में Pointer के फायदे (Advantages of Pointers in C)
-
मेमोरी तक सीधा पहुँचने की सुविधा देता है, जिससे प्रोग्राम तेज़ चलता है।
-
ऐरे (Array) के एलिमेंट्स को आसानी से एक्सेस और बदल सकते हैं।
-
फंक्शन में वेरिएबल के एड्रेस पास करके Call by Reference संभव है।
-
लिंक्ड लिस्ट, स्टैक, क्यू, ट्री जैसी डायनामिक डाटा स्ट्रक्चर बनाने में जरूरी है।
-
डेटा कॉपी करने की आवश्यकता कम होती है — समय और मेमोरी दोनों बचते हैं।
-
स्ट्रिंग्स (Strings) को प्रभावी रूप से हैंडल करने में सहायक है।
-
Function Pointer के माध्यम से फंक्शन को डायनामिक रूप से कॉल किया जा सकता है।
C में Pointer के नुकसान (Disadvantages of Pointers in C)
-
शुरुआती विद्यार्थियों के लिए समझना कठिन होता है।
-
जब Pointer उस मेमोरी को दर्शाता है जो पहले ही मुक्त (free) हो चुकी है, तो प्रोग्राम क्रैश हो सकता है।
-
बिना आरंभिककरण (initialization) के उपयोग करने पर अनपेक्षित परिणाम (undefined behavior) मिलता है।
-
गलत Pointer उपयोग से मेमोरी खराब हो सकती है या डेटा नष्ट हो सकता है।
-
Pointer से संबंधित त्रुटियाँ (errors) ढूंढना और सुधारना कठिन होता है।
-
अवैध (invalid) या NULL pointer को एक्सेस करने से प्रोग्राम क्रैश हो सकता है।
C में Pointer के प्रकार (Types of Pointers in C)
1️⃣ Null Pointer
ऐसा pointer जो किसी भी वैध मेमोरी स्थान को नहीं दर्शाता।
इसे सामान्यतः NULL से आरंभ किया जाता है ताकि यह खाली (empty) या अप्रयुक्त (unused) दर्शाए।
उदाहरण:
यहाँ p किसी भी वेरिएबल के एड्रेस को नहीं दर्शा रहा है।
2️⃣ Void Pointer (Generic Pointer)
ऐसा pointer जो किसी भी डेटा टाइप (int, float, char, आदि) का एड्रेस रख सकता है।
इसे उपयोग करने से पहले उचित प्रकार में Typecast करना आवश्यक है।
उदाहरण:
यहाँ ptr एक void pointer है जो a का एड्रेस रखता है।
3️⃣ Wild Pointer
ऐसा pointer जिसे घोषित तो किया गया है, लेकिन आरंभिककृत (initialized) नहीं किया गया।
यह अनजानी मेमोरी लोकेशन को दर्शाता है और प्रोग्राम को क्रैश कर सकता है।
उदाहरण:
4️⃣ Array Pointer
ऐसा pointer जो किसी array के पहले तत्व (first element) के एड्रेस को दर्शाता है।
Array का नाम स्वयं एक pointer की तरह कार्य करता है।
उदाहरण:
5️⃣ Function Pointer
ऐसा pointer जो किसी फंक्शन के एड्रेस को स्टोर करता है।
इसके द्वारा फंक्शन को अप्रत्यक्ष रूप से (indirectly) कॉल किया जा सकता है।
उदाहरण:
6️⃣ Pointer to Structure
ऐसा pointer जो किसी structure वेरिएबल का एड्रेस स्टोर करता है।
इसके द्वारा स्ट्रक्चर के मेंबर्स को -> ऑपरेटर से एक्सेस किया जाता है।
उदाहरण:
7️⃣ Pointer to Pointer (Double Pointer)
यह pointer किसी दूसरे pointer का एड्रेस रखता है।
इसका उपयोग कई स्तरों की रेफरेंसिंग (multiple referencing) के लिए होता है।
उदाहरण:
8️⃣ Constant Pointer
ऐसा pointer जिसका address नहीं बदला जा सकता, परंतु उस एड्रेस पर रखे मान को बदला जा सकता है।
उदाहरण:
No comments:
Post a Comment