अनुशंसित, 2019

संपादक की पसंद

सूचक और संदर्भ के बीच अंतर

"सूचक" और "संदर्भ" दोनों का उपयोग किसी अन्य चर को इंगित करने या संदर्भित करने के लिए किया जाता है। लेकिन, दोनों में मूल अंतर यह है कि एक पॉइंटर वैरिएबल एक वैरिएबल की ओर इशारा करता है, जिसकी मेमोरी लोकेशन इसमें स्टोर होती है। संदर्भ चर एक चर के लिए एक उपनाम है जिसे इसे सौंपा गया है। नीचे दिए गए तुलना चार्ट एक सूचक और एक संदर्भ के बीच अन्य अंतरों की पड़ताल करते हैं।

तुलना चार्ट

तुलना के लिए आधारसूचकसंदर्भ
बुनियादीसूचक एक चर का मेमोरी एड्रेस है।संदर्भ एक चर के लिए एक उपनाम है।
रिटर्नपॉइंटर वेरिएबल पॉइंटर वैरिएबल में रखे गए पते पर स्थित मान को लौटाता है जो कि पॉइंटर साइन '*' से पहले होता है।संदर्भ चर संदर्भ चिह्न 'और' द्वारा पूर्ववर्ती चर का पता देता है।
ऑपरेटर्स*, ->और
अशक्त संदर्भसूचक चर NULL को संदर्भित कर सकता है।संदर्भ चर NULL का संदर्भ कभी नहीं दे सकता।
प्रारंभएक असिंचित पॉइंटर बनाया जा सकता है।एक असंवैधानिक संदर्भ कभी नहीं बनाया जा सकता है।
प्रारंभ का समयकार्यक्रम में किसी भी बिंदु पर सूचक चर को आरंभ किया जा सकता है।संदर्भ चर को इसके निर्माण के समय केवल आरंभ किया जा सकता है।
reinitializationपॉइंटर वैरिएबल को आवश्यकता के अनुसार कई बार रीइंस्ट्रिक्ट किया जा सकता है।संदर्भ चर को कार्यक्रम में फिर से पुन: व्यवस्थित नहीं किया जा सकता है।

पॉइंटर की परिभाषा

एक "पॉइंटर" एक चर है जो दूसरे चर की मेमोरी लोकेशन रखता है। सूचक चर द्वारा उपयोग किए गए ऑपरेटर * और -> हैं। पॉइंटर वैरिएबल की घोषणा में आधार डेटा प्रकार होता है, जिसके बाद '*' चिन्ह और चर नाम होता है।

 प्रकार * var_name; 

एक उदाहरण की मदद से पॉइंटर को समझते हैं।

 int a = 4; int * ptr = & a; अदालत < 

यहां, हमारे पास एक पूर्णांक चर है, एक सूचक चर ptr जो चर का पता संग्रहीत करता है a।

सूचक अंकगणित

पॉइंटर चर को दो अंकगणित ऑपरेटरों के साथ संचालित किया जा सकता है जो "जोड़" और "घटाव" हैं। जोड़ को "वेतन वृद्धि" के रूप में संदर्भित किया जाता है, और घटाव को "वेतन वृद्धि" कहा जाता है। जैसा कि एक पॉइंटर वैरिएबल बढ़ा हुआ है, यह उसके बेस टाइप के अगले वैरिएबल की मेमोरी लोकेशन की ओर इशारा करता है। जैसा कि एक पॉइंटर वैरिएबल घटाया जाता है, यह उसके बेस प्रकार के पिछले वेरिएबल की मेमोरी लोकेशन की ओर इशारा करता है। इसलिए, एक सरणी को पॉइंटर चर द्वारा कुशलता से एक्सेस किया जा सकता है।

एकाधिक अप्रत्यक्ष

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

 प्रकार ** var_name; 

आइए एक उदाहरण के साथ इसका अध्ययन करें।

 int a = 4; int * ptr1 = & a; int ** ptr2 = & ptr1; अदालत < 

कार्य सूचक

जैसा कि हम जानते हैं कि एक फ़ंक्शन एक चर नहीं है, फिर भी इसमें एक मेमोरी स्थान है, जिसे एक पॉइंटर चर को सौंपा जा सकता है। एक बार एक पॉइंटर किसी फंक्शन की ओर इशारा करता है, तो उस फंक्शन पॉइंटर से फंक्शन को कॉल किया जा सकता है।

सूचक के बारे में याद रखने के लिए महत्वपूर्ण बिंदु।

  • पॉइंटर वैरिएबल को इसके इनिशियलाइज़ेशन के बिना बनाया जा सकता है, और इसे प्रोग्राम में कहीं भी इनिशियलाइज़ किया जा सकता है।
  • पॉइंटर वेरिएबल को दूसरे वेरिएबल पर रीइंस्ट्रक्ट किया जा सकता है।
  • सूचक चर NULL को संदर्भित कर सकता है।

संदर्भ की परिभाषा

संदर्भ चर का उपयोग चर को संदर्भित करने के लिए किया जाता है जो उस संदर्भ चर को सौंपा गया है। संदर्भ चर द्वारा प्रयुक्त ऑपरेटर 'और' है। एक संदर्भ चर की घोषणा में आधार प्रकार होता है जिसके बाद 'और' चिह्न और फिर चर नाम होता है।

 टाइप करें और संदर्भित_वर_नाम = var_ नाम; 

यहाँ, प्रकार डेटाटाइप है, और ऑपरेटर पुष्टि करता है कि यह एक संदर्भ चर है। संदर्भ चर का नाम refer_var_name है। Var_name चर का नाम है, जिसे हम संदर्भ चर को संदर्भित करना चाहते हैं।

एक उदाहरण की मदद से संदर्भ चर को समझते हैं।

 int a = 4; int & b = a; // b का तात्पर्य ab = 6 से है; // अब एक = 6 

यहाँ, प्रकार int के चर को एक मान दिया गया है। संदर्भ चर को चर a, यानी b का नाम दिया गया है। अब, जब हम b को एक और मान देते हैं, तो हम a का मान संशोधित करते हैं। इसलिए, यह कहा जा सकता है कि संदर्भ चर में किए गए परिवर्तन उस संदर्भ चर द्वारा संदर्भित चर में भी होंगे।

सबसे महत्वपूर्ण बिंदु यह है कि संदर्भ चर को इसके निर्माण के समय आरंभीकृत किया जाना चाहिए। संदर्भ चर को एक चर के साथ आरंभीकृत किया गया है, तो इसे दूसरे चर का संदर्भ देने के लिए पुन: व्यवस्थित नहीं किया जा सकता है। जिस क्षण आप एक संदर्भ चर के लिए एक मूल्य प्रदान करते हैं, आप उस मान को एक चर पर निर्दिष्ट करते हैं जो एक संदर्भ चर को इंगित करता है। संदर्भ चर NULL का संदर्भ कभी नहीं दे सकता। एक संदर्भ चर पर अंकगणित नहीं किया जा सकता है।

संदर्भ चर का उपयोग तीन तरीकों से किया जा सकता है:

  • फ़ंक्शन रिटर्न मान के रूप में।
  • एक फ़ंक्शन पैरामीटर के रूप में।
  • एक अकेले खड़े संदर्भ के रूप में।

सूचक और संदर्भ के बीच मुख्य अंतर

  1. संदर्भ एक चर को संदर्भित करने के लिए एक और नाम बनाने की तरह है ताकि इसे विभिन्न नामों से संदर्भित किया जा सके। दूसरी ओर, एक पॉइंटर केवल एक चर का मेमोरी एड्रेस होता है।
  2. एक पॉइंटर वैरिएबल जो '*' से पहले होता है, वैरिएबल का मान लौटाता है, जिसका पता पॉइंटर वेरिएबल में जमा होता है। 'और' द्वारा पूर्ववर्ती एक संदर्भ चर उस चर का पता देता है।
  3. सूचक ऑपरेटर * और -> हैं, जबकि संदर्भ ऑपरेटर & है।
  4. एक पॉइंटर वैरिएबल अगर किसी वैरिएबल के पते को नहीं ले जाता है तो यह शून्य की ओर इशारा करता है। दूसरी ओर, एक संदर्भ चर कभी शून्य का संदर्भ नहीं दे सकता है।
  5. आप हमेशा एक इकाई संकेत सूचक चर बना सकते हैं, लेकिन हम एक संदर्भ बनाते हैं जब हमें कुछ चर के उपनाम की आवश्यकता होती है ताकि आप कभी भी एक इकाईगत संदर्भ नहीं बना सकें।
  6. आप एक पॉइंटर को फिर से संगठित कर सकते हैं, लेकिन एक बार जब आप इनिशियलाइज़ कर लेते हैं तो आप इसे फिर से रीइंक्रिटाइज़ नहीं कर सकते।
  7. आप एक खाली पॉइंटर बना सकते हैं और इसे किसी भी समय इनिशियलाइज़ कर सकते हैं लेकिन आपको रिफ़रेंस इनिशियलाइज़ करना होगा जब आप रेफ़रेंस बनाएँगे।

ध्यान दें:

जावा पॉइंटर्स का समर्थन नहीं करता है।

निष्कर्ष

सूचक और संदर्भ दोनों का उपयोग किसी अन्य चर को इंगित करने या संदर्भित करने के लिए किया जाता है। लेकिन उनके उपयोग और कार्यान्वयन में भिन्नता है।

Top