C++
C ++ फ़ंक्शन "कॉल बाय वैल्यू" बनाम "कॉल बाय संदर्भ"
खोज…
परिचय
इस अनुभाग का कार्यक्षेत्र एक कॉल के कार्य के मापदंडों के साथ क्या होता है के लिए सिद्धांत और कार्यान्वयन में अंतर को स्पष्ट करना है।
फ़ंक्शन कॉल और फ़ंक्शन के अंदर पैरामीटर को विस्तार से चर के रूप में देखा जा सकता है, जहां इन चर के दृश्यमान व्यवहार और पहुंच उन्हें सौंपने के लिए इस्तेमाल की गई विधि के साथ भिन्न होती है।
इसके अतिरिक्त, फ़ंक्शन कॉल के बाद चर और उनके संबंधित मूल्यों की पुन: प्रयोज्यता भी इस विषय द्वारा बताई गई है।
मूल्य से बुलाओ
एक फ़ंक्शन को कॉल करने पर प्रोग्राम स्टैक पर नए तत्व बनाए जाते हैं। इनमें फ़ंक्शन के बारे में कुछ जानकारी और मापदंडों और रिटर्न वैल्यू के लिए स्पेस (मेमोरी लोकेशन) भी शामिल हैं।
किसी फ़ंक्शन को पैरामीटर सौंपते समय उपयोग किए गए चर (या शाब्दिक) का मान फ़ंक्शन पैरामीटर की मेमोरी स्थान में कॉपी किया जाता है। इसका मतलब यह है कि अब एक ही मूल्य के साथ दो मेमोरी स्थान हैं। फ़ंक्शन के अंदर हम केवल पैरामीटर मेमोरी लोकेशन पर काम करते हैं।
फ़ंक्शन को छोड़ने के बाद प्रोग्राम स्टैक पर मेमोरी पॉपप (हटा दी गई) होती है जो फ़ंक्शन कॉल के सभी डेटा को मिटा देती है, जिसमें हमारे द्वारा उपयोग किए जाने वाले मापदंडों का मेमोरी स्थान भी शामिल है। इस प्रकार, फ़ंक्शन के अंदर बदले गए मान बाहरी चर मानों को प्रभावित नहीं करते हैं।
int func(int f, int b) {
//new variables are created and values from the outside copied
//f has a value of 0
//inner_b has a value of 1
f = 1;
//f has a value of 1
b = 2;
//inner_b has a value of 2
return f+b;
}
int main(void) {
int a = 0;
int b = 1; //outer_b
int c;
c = func(a,b);
//the return value is copied to c
//a has a value of 0
//outer_b has a value of 1 <--- outer_b and inner_b are different variables
//c has a value of 3
}
इस कोड में हम मुख्य फ़ंक्शन के अंदर वैरिएबल बनाते हैं। इन्हें नियत मान मिले। फ़ंक्शन को कॉल करने पर दो नए चर बनाए गए हैं: f
और inner_b
जहां b
बाहरी नाम के साथ नाम साझा करता है यह मेमोरी लोकेशन साझा नहीं करता है। a<->f
और b<->b
का व्यवहार समान है।
निम्नलिखित ग्राफिक का प्रतीक है कि स्टैक पर क्या हो रहा है और क्यों वेरिबेल b
में कोई बदलाव नहीं हुआ है। ग्राफिक पूरी तरह से सही नहीं है लेकिन उदाहरण को सशक्त बनाता है।
इसे "कॉल बाय वैल्यू" कहा जाता है क्योंकि हम चर को नहीं बल्कि इन चर के मूल्यों को सौंपते हैं।