C++ कॉल बाय एड्रेस और कॉल बाय रेफरेंस

C Call Address



C++ एक लचीली सामान्य प्रयोजन वाली प्रोग्रामिंग भाषा है। यह मूल रूप से द्वारा बनाया गया था बर्जने स्ट्रॉस्ट्रुप, एक डेनिश कंप्यूटर वैज्ञानिक, 1985 में वापस। C ++ तीन-पैरामीटर पासिंग विधियों का समर्थन करता है, अर्थात, मूल्य द्वारा कॉल, पते से कॉल, और संदर्भ द्वारा कॉल। इस लेख में, हम कॉल बाय एड्रेस और कॉल बाय रेफरेंस मैकेनिज्म के बारे में चर्चा करने जा रहे हैं।

एक समारोह क्या है?

इससे पहले कि हम वास्तविक विषय में कूदें, हमें यह समझने की जरूरत है कि C++ में फंक्शन क्या है। आप में से कई लोग पहले से ही कार्यों से परिचित हो सकते हैं।







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



प्रत्येक सी ++ प्रोग्राम में मुख्य () फ़ंक्शन होगा। मुख्य () फ़ंक्शन सी ++ प्रोग्राम के लिए प्रवेश बिंदु है। मुख्य () फ़ंक्शन के अलावा, प्रोग्रामर जितने चाहें उतने फ़ंक्शन को परिभाषित कर सकता है।



फ़ंक्शन को परिभाषित करने का सिंटैक्स यहां दिया गया है:





रिटर्न_टाइप फंक्शन_नाम(इनपुट पैरामीटर सूची)

सी ++ में फ़ंक्शन 0 या अधिक इनपुट पैरामीटर स्वीकार कर सकता है, जबकि यह केवल एक रिटर्न-वैल्यू लौटा सकता है।

पता क्या है?

C++ (C language के समान) में दो प्रकार के वेरिएबल होते हैं- Data Variable और Address Variable। पता चर का उपयोग किसी अन्य डेटा चर के पते को संग्रहीत करने के लिए किया जाता है। उदाहरण के लिए, आइए निम्नलिखित कोड स्निपेट पर विचार करें:



NSमैं= 100;
NS *पीटीआर= औरमैं;

यहां, पहला कथन हमें बताता है कि चर i एक डेटा चर है, और यह मान १०० संग्रहीत कर रहा है। दूसरे कथन में, हम एक सूचक चर घोषित कर रहे हैं, अर्थात ptr, और इसे चर i के पते के साथ प्रारंभ कर रहे हैं।

संदर्भ क्या है?

संदर्भ C++ भाषा की एक और शक्तिशाली विशेषता है। आइए निम्नलिखित कोड स्निपेट पर विचार करें:

NSप्रति= 200;
NS औरआर=प्रति;

इस उदाहरण में, हमने एक पूर्णांक घोषित किया है, अर्थात a और फिर एक संदर्भ चर r घोषित किया है, जिसे a के मान से आरंभ किया गया है। तो, संदर्भ चर किसी अन्य चर के उपनाम के अलावा और कुछ नहीं है।

पैरामीटर पास करने के तरीके:

C++ भाषा में तीन प्रकार के पैरामीटर पास करने के तरीके हैं:

  1. मूल्य से कॉल करें / मूल्य से पास करें
  2. पते से कॉल करें / पते से पास करें
  3. संदर्भ द्वारा कॉल करें / संदर्भ द्वारा पास करें

इस लेख में, हम - कॉल बाय एड्रेस और कॉल बाय रेफरेंस के बारे में चर्चा कर रहे हैं।

कॉल बाय एड्रेस / पास बाय एड्रेस क्या है?

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

कॉल बाय रेफरेंस / पास बाय रेफरेंस क्या है?

संदर्भ द्वारा कॉल / संदर्भ विधि द्वारा पास में, फ़ंक्शन पैरामीटर को संदर्भ के रूप में पारित किया जाता है। फ़ंक्शन परिभाषा के अंदर, वास्तविक पैरामीटर को संदर्भ चर का उपयोग करके एक्सेस किया जाता है।

उदाहरण:

अब, चूंकि हम पैरामीटर पासिंग विधियों की अवधारणा को समझते हैं, हम C++ में पैरामीटर पासिंग मैकेनिज्म को समझने के लिए कई उदाहरण प्रोग्राम देखेंगे:

  1. उदाहरण -1 - पते से कॉल करें (1)
  2. उदाहरण -2 - पते से कॉल करें (2)
  3. उदाहरण -3 - संदर्भ द्वारा कॉल करें (1)
  4. उदाहरण -4 - संदर्भ द्वारा कॉल (2)

C++ में कॉल बाय एड्रेस विधि कैसे काम करती है, यह समझाने के लिए पहले दो उदाहरण दिए गए हैं। अंतिम दो उदाहरण संदर्भ अवधारणा द्वारा कॉल की व्याख्या करने के लिए हैं।

उदाहरण -1 - पते से कॉल करें (1)

इस उदाहरण में, हम पता तंत्र द्वारा कॉल प्रदर्शित करने जा रहे हैं। मुख्य () फ़ंक्शन से, हम हैलो () फ़ंक्शन को कॉल कर रहे हैं और var का पता पास कर रहे हैं। फंक्शन डेफिनिशन में, हम एक पॉइंटर वेरिएबल में var का पता प्राप्त कर रहे हैं, यानी, p। फंक्शन हेलो के अंदर पॉइंटर की मदद से var की वैल्यू को 200 में बदला जा रहा है। इसलिए, हैलो () फ़ंक्शन कॉल के बाद मुख्य () फ़ंक्शन के अंदर var का मान 200 में बदल रहा है।

#शामिल
का उपयोग करते हुए नाम स्थानघंटे;

शून्यनमस्ते(NS *पी)
{
लागत <<एंडली<< 'हैलो () फ़ंक्शन के अंदर:' <<एंडली;
लागत << '*p =' का मान << *पी<<एंडली;
*पी= 200;
लागत << '*p =' का मान << *पी<<एंडली;
लागत << 'हैलो () फ़ंक्शन से बाहर निकलना।' <<एंडली;
}

NSमुख्य()
{
NSकहां= 100;
लागत << 'मुख्य () फ़ंक्शन के अंदर var का मान =' <<कहां<<एंडली;

नमस्ते(औरकहां);

लागत <<एंडली<< 'मुख्य () फ़ंक्शन के अंदर var का मान =' <<कहां<<एंडली;

वापसी 0;
}

उदाहरण -2 - पते से कॉल करें (2)

यह पता विधि द्वारा कॉल का एक और उदाहरण है। इस उदाहरण में, हम यह समझाने जा रहे हैं कि वास्तविक जीवन की समस्या को हल करने के लिए कॉल बाय एड्रेस विधि का उपयोग कैसे किया जा सकता है। उदाहरण के लिए, हम दो चर को स्वैप करने के लिए एक फ़ंक्शन लिखना चाहते हैं। यदि हम दो चरों को स्वैप करने के लिए मूल्य तंत्र द्वारा कॉल का उपयोग करते हैं, तो वास्तविक चर कॉलर फ़ंक्शन में स्वैप नहीं होते हैं। ऐसे परिदृश्य में कॉल बाय एड्रेस विधि का उपयोग किया जा सकता है। इस उदाहरण में, हम var_1 (&var_1) और var_2 (&var_2) दोनों के पते को mySwap() फ़ंक्शन में पास कर रहे हैं। MySwap () फ़ंक्शन के अंदर, हम पॉइंटर्स की मदद से इन दो वेरिएबल्स के मानों की अदला-बदली कर रहे हैं। जैसा कि आप नीचे दिए गए आउटपुट में देख सकते हैं, mySwap () फ़ंक्शन के निष्पादित होने के बाद इन चरों का वास्तविक मान मुख्य () फ़ंक्शन में स्वैप हो रहा है।

#शामिल
का उपयोग करते हुए नाम स्थानघंटे;

शून्यमेरी अदला-बदली(NS *vptr_1,NS *vptr_2)
{
NStemp_var;
temp_var= *vptr_1;
*vptr_1= *vptr_2;
*vptr_2=temp_var;
}

NSमुख्य()
{
NSvar_1= 100;
NSvar_2= 300;

लागत << 'mySwap() फ़ंक्शन को कॉल करने से पहले, var_1 का मान:' <<var_1<<एंडली;
लागत << 'mySwap() फ़ंक्शन को कॉल करने से पहले, var_2 का मान:' <<var_2<<एंडली<<एंडली;

लागत << 'कॉलिंग mySwap () फंक्शन - कॉल बाय एड्रेस।' <<एंडली<<एंडली;
मेरी अदला-बदली(औरvar_1,औरvar_2);

लागत << 'mySwap() फ़ंक्शन को कॉल करने के बाद, var_1 का मान:' <<var_1<<एंडली;
लागत << 'mySwap() फ़ंक्शन को कॉल करने के बाद, var_2 का मान:' <<var_2<<एंडली;

वापसी 0;
}

उदाहरण -3 - संदर्भ द्वारा कॉल करें (1)

इस उदाहरण में, हम यह प्रदर्शित करने जा रहे हैं कि C++ में कॉल बाय रेफरेंस कैसे काम करता है। हैलो () फ़ंक्शन परिभाषा में, मान एक संदर्भ चर (&p) के रूप में प्राप्त किया जा रहा है। संदर्भ चर (यानी, पी) की मदद से, हम मुख्य () फ़ंक्शन के अंदर वास्तविक पैरामीटर (var) के मान को बदलने में सक्षम हैं।

#शामिल
का उपयोग करते हुए नाम स्थानघंटे;

शून्यनमस्ते(NS औरपी)
{
लागत <<एंडली<< 'हैलो () फ़ंक्शन के अंदर:' <<एंडली;
लागत << 'पी का मान =' <<पी<<एंडली;
पी= 200;
लागत << 'पी का मान =' <<पी<<एंडली;
लागत << 'हैलो () फ़ंक्शन से बाहर निकलना।' <<एंडली;
}

NSमुख्य()
{
NSकहां= 100;
लागत << 'मुख्य () फ़ंक्शन के अंदर var का मान =' <<कहां<<एंडली;

नमस्ते(कहां);

लागत <<एंडली<< 'मुख्य () फ़ंक्शन के अंदर var का मान =' <<कहां<<एंडली;

वापसी 0;
}

उदाहरण -4 - संदर्भ द्वारा कॉल(2)

संदर्भ द्वारा कॉल का यह एक और उदाहरण है। इस उदाहरण में, हम यह प्रदर्शित करने जा रहे हैं कि वास्तविक दुनिया के उदाहरण की मदद से C++ में कॉल बाय रेफरेंस कैसे काम करता है। MySwap () फ़ंक्शन को निम्नलिखित मापदंडों के साथ मुख्य () फ़ंक्शन से कहा जाता है - var_1 और var_2। MySwap () फ़ंक्शन के अंदर, हम पैरामीटर को संदर्भ चर के रूप में प्राप्त कर रहे हैं।

#शामिल
का उपयोग करते हुए नाम स्थानघंटे;

शून्यमेरी अदला-बदली(NS औरvref_1,NS औरvref_2)
{
NStemp_var;
temp_var=vref_1;
vref_1=vref_2;
vref_2=temp_var;
}

NSमुख्य()
{
NSvar_1= 100;
NSvar_2= 300;

लागत << 'mySwap() फ़ंक्शन को कॉल करने से पहले, var_1 का मान:' <<var_1<<एंडली;
लागत << 'mySwap() फ़ंक्शन को कॉल करने से पहले, var_2 का मान:' <<var_2<<एंडली<<एंडली;

लागत << 'कॉलिंग mySwap () फ़ंक्शन - संदर्भ द्वारा कॉल करें।' <<एंडली<<एंडली;
मेरी अदला-बदली(var_1, var_2);

लागत << 'mySwap() फ़ंक्शन को कॉल करने के बाद, var_1 का मान:' <<var_1<<एंडली;
लागत << 'mySwap() फ़ंक्शन को कॉल करने के बाद, var_2 का मान:' <<var_2<<एंडली;

वापसी 0;
}

निष्कर्ष

पैरामीटर पास करने के तरीकों को समझना सी ++ बहुत महत्वपूर्ण है। सी प्रोग्रामिंग भाषा कॉल बाय वैल्यू और कॉल बाय एड्रेस का समर्थन करती है। लेकिन, सी ++ पिछले दो तंत्रों के साथ संदर्भ द्वारा कॉल का समर्थन करता है। इस लेख में, हमने कॉल बाय एड्रेस और कॉल बाय रेफरेंस की अवधारणा को समझने के लिए कई कामकाजी उदाहरण देखे हैं। एंबेडेड डोमेन एप्लिकेशन में कॉल बाय एड्रेस एक बहुत शक्तिशाली और लोकप्रिय तरीका है।