📘 Lesson  ·  Lesson 54

Pointers in C

Pointer क्या है? (सरल विचार)

अपने computer की memory को घरों की एक लंबी गली समझिए, और हर घर का एक address होता है। जब आप int x = 10; जैसा variable बनाते हैं, तो value 10 इन्हीं में से किसी एक घर में रखी जाती है। उस घर का भी एक address होता है।

Pointer बस एक ऐसा variable है जो सामान्य value के बजाय एक address रखता है। तो जहाँ x में number 10 है, वहीं x का pointer रखता है "वह address जहाँ 10 रहता है।" यही एक विचार pointers की पूरी नींव है।

💡 एक लाइन में

सामान्य variable value रखता है। Pointer किसी value का address रखता है।

Pointer declare और इस्तेमाल

Pointer declare करने के लिए उसके नाम से पहले * लगाते हैं, और बताते हैं कि वह किस type की value की ओर इशारा करेगा।

C Language
#include <stdio.h>
int main() {
    int x = 10;
    int *p = &x;        // p, x का address रखता है

    printf("x ki value     : %d\n", x);
    printf("x ka address   : %p\n", &x);
    printf("p me address   : %p\n", p);
    printf("p se value      : %d\n", *p);   // dereference
    return 0;
}
Output:
x ki value : 10
x ka address : 0x7ffee3b2c8
p me address : 0x7ffee3b2c8
p se value : 10

ध्यान दें कि &x और p एक ही address print करते हैं — क्योंकि p में सचमुच x का address है। और *p वापस 10 देता है, उस address की value। (हर बार चलाने पर आपके address के numbers अलग होंगे — यह सामान्य है।)

दो मुख्य operators: & और *

Pointers की हर चीज़ इन्हीं दो operators पर आधारित है, जो एक-दूसरे के उल्टे हैं:

Operatorनाममतलब
&Address-of&x = वह address जहाँ x रखा है
*Dereference*p = p में रखे address की value
💡 याद रखने का आसान तरीका

& पूछता है "यह कहाँ है?" और * पूछता है "वहाँ क्या है?"

Pointer से value बदलना

क्योंकि pointer के पास variable का address होता है, वह उस variable की value को सीधे बदल भी सकता है। यह pointers की सबसे शक्तिशाली क्षमताओं में से एक है।

C Language
#include <stdio.h>
int main() {
    int x = 10;
    int *p = &x;

    *p = 25;            // pointer से x बदलें
    printf("x ab %d hai\n", x);
    return 0;
}
Output:
x ab 25 hai

हमने कभी सीधे x = 25 नहीं लिखा, फिर भी x 25 हो गया — क्योंकि *p x की memory तक पहुँचकर उसे बदल देता है। Functions इसी तरह उन्हें दिए गए variables को बदलते हैं (देखें call by value बनाम reference)।

NULL pointer और सुरक्षा

जो pointer अभी किसी valid चीज़ की ओर इशारा नहीं करता, उसे NULL पर set करना चाहिए। इससे एक सुरक्षित, जाँचने योग्य "खाली" स्थिति मिलती है।

C Language
#include <stdio.h>
int main() {
    int *p = NULL;      // अभी कुछ नहीं

    if (p != NULL)
        printf("Value: %d\n", *p);
    else
        printf("Pointer khaali hai, use karna safe nahi.\n");
    return 0;
}
Output:
Pointer khaali hai, use karna safe nahi.
⚠️ सुनहरा नियम

NULL या बिना valid address वाले pointer पर कभी *p न लगाएँ — इससे program crash हो जाता है ("segmentation fault")। हमेशा पहले जाँचें।

Pointers की ज़रूरत क्यों?

Pointers शुरू में अमूर्त लगते हैं, पर C असली काम के लिए इन पर निर्भर है:

  • Functions के अंदर variables बदलना — function आपके असली variable को update कर सकता है, सिर्फ़ copy को नहीं।
  • Arrays और strings — ये अंदर से addresses के ज़रिए संभाले जाते हैं।
  • Dynamic memorymalloc से runtime पर memory माँगने पर pointer मिलता है।
  • Efficiency — बड़ी data copy करने से address भेजना सस्ता है।

आम गलतियाँ

  • p के किसी valid address पर इशारा करने से पहले *p इस्तेमाल करना (uninitialised pointer)।
  • & और * में उलझना — याद रखें: & address देता है, * value पढ़ता है।
  • बिना जाँचे NULL pointer dereference करना।
  • यह भूलना कि pointer का type variable के type से मेल खाना चाहिए (int के लिए int *)।
🏋️ अभ्यास

दो integer a और b declare करें, हर एक पर एक pointer point कराएँ, और सिर्फ़ pointers (*pa और *pb) से उनकी values swap करें। Result print करके पुष्टि करें कि swap हुआ।

सारांश

  • Pointer किसी दूसरे variable का address रखता है, सामान्य value नहीं।
  • &x address देता है; *p उस address की value पढ़ता (या लिखता) है।
  • *p से आप असली variable को सीधे बदल सकते हैं।
  • बिना इस्तेमाल के pointers को NULL रखें और dereference से पहले हमेशा जाँचें।
  • Pointers C में functions, arrays, strings और dynamic memory को शक्ति देते हैं।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

C में pointer असल में क्या है?
Pointer एक variable है जो किसी दूसरे variable का memory address रखता है, किसी सामान्य value (जैसे number) के बजाय। अगर कोई variable memory में किसी जगह रहता है, तो pointer आपको उस जगह का address रखने और इस्तेमाल करने देता है।
C में & और * में क्या अंतर है?
& operator का मतलब है "address of" — &x बताता है कि x कहाँ रखा है। * operator का मतलब है "value at" (dereference) — *p उस address की value देता है जो pointer p में है। ये दोनों एक-दूसरे के उल्टे हैं।
NULL pointer क्या है और यह क्यों उपयोगी है?
NULL pointer वह pointer है जिसे NULL पर set किया गया हो, यानी वह किसी सही चीज़ की ओर इशारा नहीं करता। यह एक साफ़ "खाली" स्थिति के रूप में उपयोगी है जिसे pointer इस्तेमाल करने से पहले जाँचा जा सकता है, जिससे किसी random address को पढ़ने से बचा जा सकता है।
Pointers इतनी बार program क्यों crash करते हैं?
ज़्यादातर pointer crash तब होते हैं जब ऐसा pointer dereference किया जाए जो valid memory की ओर नहीं इशारा करता — uninitialised pointer, NULL pointer, या ऐसी memory का pointer जो पहले ही free हो चुकी हो। * इस्तेमाल करने से पहले हमेशा पक्का करें कि pointer कहीं valid जगह इशारा कर रहा है।
क्या beginner के तौर पर मुझे सच में pointers चाहिए?
हाँ, आख़िरकार। Function के अंदर किसी variable को बदलने, arrays और strings को efficiently इस्तेमाल करने, और malloc से runtime पर memory लेने के लिए pointers ज़रूरी हैं। आप बिना इनके शुरू कर सकते हैं, पर C के मुख्य topics जल्दी ही pointers की समझ पर निर्भर हो जाते हैं।
← Back to C Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.