इस ट्यूटोरियल में, हम उदाहरणों की मदद से फ़ंक्शन के तर्क के रूप में पॉइंटर्स पास करने के संदर्भ में C ++ कॉल के बारे में जानेंगे।
C ++ फ़ंक्शंस ट्यूटोरियल में, हमने फ़ंक्शन को तर्क देने के बारे में सीखा। उपयोग की जाने वाली इस विधि को मूल्य से गुजरना कहा जाता है क्योंकि वास्तविक मूल्य पारित हो जाता है।
हालांकि, किसी फ़ंक्शन के लिए तर्कों को पारित करने का एक और तरीका है जहां तर्कों के वास्तविक मूल्यों को पारित नहीं किया जाता है। इसके बजाय, मूल्यों का संदर्भ पारित किया जाता है।
उदाहरण के लिए,
// function that takes value as parameter void func1(int numVal) ( // code ) // function that takes reference as parameter // notice the & before the parameter void func2(int &numRef) ( // code ) int main() ( int num = 5; // pass by value func1(num); // pass by reference func2(num); return 0; )
सूचना &
में void func2(int &numRef)
। यह दर्शाता है कि हम चर के पते को अपने पैरामीटर के रूप में उपयोग कर रहे हैं।
इसलिए, जब हम चर संख्या को तर्क के रूप में पास करके func2()
फ़ंक्शन को कॉल करते हैं, तो हम main()
वास्तव में मान 5 के बजाय संख्या चर के पते से गुजर रहे हैं ।

उदाहरण 1: बिना बिंदुओं के संदर्भ में पास होना
#include using namespace std; // function definition to swap values void swap(int &n1, int &n2) ( int temp; temp = n1; n1 = n2; n2 = temp; ) int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function to swap numbers swap(a, b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; )
आउटपुट
स्वैप करने से पहले a = 1 b = 2 स्वैप करने के बाद a = 2 b = 1
इस प्रोग्राम में, हमने वेरिएबल्स a और b को swap()
फंक्शन में पास किया। फ़ंक्शन परिभाषा पर ध्यान दें,
void swap(int &n1, int &n2)
यहां, हम &
यह सूचित करने के लिए उपयोग कर रहे हैं कि फ़ंक्शन इसके मापदंडों के रूप में पते स्वीकार करेगा।
इसलिए, कंपाइलर यह पहचान सकता है कि वास्तविक मानों के बजाय, चर का संदर्भ फ़ंक्शन मापदंडों के लिए दिया गया है।
में swap()
समारोह, समारोह मापदंडों N1 और N2 चर ए और बी के रूप में क्रमश: एक ही मूल्य ओर इशारा करते हैं। इसलिए स्वैपिंग वास्तविक मूल्य पर होती है।
पॉइंटर्स का उपयोग करके समान कार्य किया जा सकता है। पॉइंटर्स के बारे में जानने के लिए, C ++ पॉइंटर्स पर जाएँ।
उदाहरण 2: बिंदुओं का उपयोग करके संदर्भ से गुजरना
#include using namespace std; // function prototype with pointer as parameters void swap(int*, int*); int main() ( // initialize variables int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; // call function by passing variable addresses swap(&a, &b); cout << "After swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; ) // function definition to swap numbers void swap(int* n1, int* n2) ( int temp; temp = *n1; *n1 = *n2; *n2 = temp; )
आउटपुट
स्वैप करने से पहले a = 1 b = 2 स्वैप करने के बाद a = 2 b = 1
यहां, हम देख सकते हैं कि आउटपुट पिछले उदाहरण के समान है। लाइन नोटिस करें,
// &a is address of a // &b is address of b swap(&a, &b);
यहां, वेरिएबल के बजाय फंक्शन कॉल के दौरान वेरिएबल का एड्रेस पास किया जाता है।
चूंकि पता मान के बजाय पास *
किया गया है, इसलिए उस पते में संग्रहीत मान तक पहुंचने के लिए एक परिचालक ऑपरेटर का उपयोग किया जाना चाहिए।
temp = *n1; *n1 = *n2; *n2 = temp;
*n1
और *n2
क्रमशः पता n1 और n2 पर संग्रहीत मूल्य देता है।
चूंकि n1 और n2 में a और b के पते शामिल हैं, इसलिए कुछ भी किया जाता है *n1
और * n2 a और b के वास्तविक मूल्यों को बदल देगा।
इसलिए, जब हम main()
फ़ंक्शन में a और b के मान प्रिंट करते हैं , तो मान बदल दिए जाते हैं।