कॉल बाय वैल्यू (मान द्वारा कॉल)
कॉल बाय वैल्यू में, फ़ंक्शन को आर्गुमेंट्स के मान की प्रति पास की जाती है। फ़ंक्शन के अंदर किए गए परिवर्तन मूल चर को प्रभावित नहीं करते।
एल्गोरिदम
चरण 1: रनटाइम पर कोई 2 संख्याएं दर्ज करें
चरण 2: उन दो संख्याओं को कंसोल से पढ़ें
चरण 3: swap फ़ंक्शन को आर्गुमेंट्स के साथ कॉल करें (यह कॉल बाय वैल्यू है)
चरण 4: कॉल किए गए फ़ंक्शन पर जाएं: swap(int a, int b)
चरण 5: स्वैप के बाद संख्याएं प्रिंट करें
प्रोग्राम
#include <stdio.h>
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
printf("फ़ंक्शन के अंदर: a=%d, b=%d\n", a, b);
}
int main() {
int a, b;
printf("2 संख्याएं दर्ज करें: ");
scanf("%d %d", &a, &b);
printf("स्वैप से पहले: a=%d, b=%d\n", a, b);
swap(a, b); // मान पास किए जाते हैं
printf("स्वैप के बाद: a=%d, b=%d\n", a, b);
return 0;
}
आउटपुट
2 संख्याएं दर्ज करें: 10 20
स्वैप से पहले: a=10, b=20
फ़ंक्शन के अंदर: a=20, b=10
स्वैप के बाद: a=10, b=20
व्याख्या
mainमेंa=10, b=20swap(a, b)कॉल करता है →aऔरbके मान (10, 20) कॉपी होकर फ़ंक्शन पैरामीटर्स में जाते हैं- फ़ंक्शन के अंदर स्वैप होता है → स्थानीय
a=20, b=10 - फ़ंक्शन समाप्त → स्थानीय चर नष्ट
mainमें मूलa, bअपरिवर्तित:10, 20
मेमोरी चित्रण
main() स्टैक फ्रेम: swap() स्टैक फ्रेम:
+-------+-------+ +-------+-------+
| a: 10 | b: 20 | ──────► | a: 10 | b: 20 | (कॉपी प्राप्त)
+-------+-------+ +-------+-------+
| स्वैप |
+-------+-------+
| a: 20 | b: 10 | (स्थानीय परिवर्तन)
+-------+-------+
फ्रेम समाप्त, मान खो गए
कब उपयोग करें?
- जब मूल चर को संशोधित नहीं करना चाहते
- छोटे डेटा प्रकार (int, float, char) के लिए कुशल
- बड़े संरचनाओं/सरणियों के लिए अकुशल (कॉपी ओवरहेड)
तुलना: कॉल बाय रेफरेंस (अगला लेख)
| पहलू | कॉल बाय वैल्यू | कॉल बाय रेफरेंस |
|---|---|---|
| पास किया जाता है | मान की प्रति | पता |
| मूल पर प्रभाव | नहीं | हां |
| सिंटैक्स | func(a, b) | func(&a, &b) |
| पैरामीटर | int a | int *a |
| एक्सेस | सीधे a | *a के माध्यम से |