Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

कॉल बाय वैल्यू और कॉल बाय रेफरेंस में अंतर


प्रोग्रामिंग में फंक्शन में पैरामीटर पास करने के आधार पर हम फंक्शन इनवोकेशन को दो में वर्गीकृत करते हैं: कॉल बाय वैल्यू और कॉल बाय रेफरेंस। जैसा कि नाम से पता चलता है, दोनों इनवोकेशन में हम फंक्शन को पैरामीटर के प्रकार द्वारा कॉल कर रहे हैं - एक में हम पैरामीटर का वास्तविक मान पास करते हैं और दूसरे में हम पैरामीटर का स्थान/रेफरेंस पास करते हैं।

कॉल बाय वैल्यू और कॉल बाय रेफरेंस के बीच महत्वपूर्ण अंतर निम्नलिखित हैं।

Sr. No. Key कॉल बाय वैल्यू कॉल बाय रेफरेंस
1 नामकरण परंपरा चूंकि इस प्रकार में फंक्शन इनवोकेशन के लिए पैरामीटर का मान पास किया जाता है इसलिए इसे कॉल बाय वैल्यू नाम दिया गया है। दूसरी ओर इस प्रकार में फंक्शन को इनवोक करने के लिए पास किए गए पैरामीटर का रेफरेंस पास किया जाता है इसलिए इसे कॉल बाय रेफरेंस नाम दिया गया है।
2 आंतरिक कार्यान्वयन कॉल बाय वैल्यू में फंक्शन कॉल करते समय पास किए गए पैरामीटर के मान फंक्शन के वास्तविक लोकल आर्गुमेंट में कॉपी हो जाते हैं। कॉल बाय रेफरेंस में पास किए गए पैरामीटर का लोकेशन एड्रेस/रेफरेंस कॉपी होकर लोकल आर्गुमेंट को असाइन हो जाता है ताकि पास किया गया पैरामीटर और वास्तविक आर्गुमेंट दोनों एक ही लोकेशन को संदर्भित करें।
3 परिवर्तनों का प्रभाव चूंकि पास किए गए पैरामीटर का मान फंक्शन के आर्गुमेंट में कॉपी हो जाता है इसलिए फंक्शन के अंदर आर्गुमेंट में किया गया कोई भी परिवर्तन पास किए गए पैरामीटर में प्रतिबिंबित नहीं होता। चूंकि आर्गुमेंट और पास किया गया पैरामीटर दोनों एक ही लोकेशन को संदर्भित करते हैं इसलिए फंक्शन के अंदर आर्गुमेंट में किया गया कोई भी परिवर्तन पास किए गए पैरामीटर में प्रतिबिंबित होता है।
4 संदर्भित मेमोरी लोकेशन पास किए गए पैरामीटर और फंक्शन के वास्तविक आर्गुमेंट दोनों द्वारा संदर्भित मेमोरी लोकेशन अलग होता है। पास किए गए पैरामीटर और फंक्शन के वास्तविक आर्गुमेंट दोनों द्वारा संदर्भित मेमोरी लोकेशन समान होता है।
5 समर्थित भाषाएं कॉल बाय वैल्यू C++, PHP, Visual Basic NET, और C# जैसी भाषाओं द्वारा समर्थित है। कॉल बाय रेफरेंस मुख्य रूप से JAVA द्वारा समर्थित है।

कॉल बाय वैल्यू बनाम कॉल बाय रेफरेंस का उदाहरण

ByValue.c

#include <stdio.h>
class ByValue{
    void swapByValue(int, int); /* Prototype */
    int main(){
        int n1 = 10, n2 = 20;
        swapByValue(n1, n2);
        printf("n1: %d, n2: %d\n", n1, n2);
    }
    void swapByValue(int a, int b){
        int t;
        t = a; a = b; b = t;
    }
}

आउटपुट

n1: 10, n2: 20

उदाहरण

ByReference.c

#include <stdio.h>
class ByReference{
    void swapByReference(int*, int*);
    int main(){
        int n1 = 10, n2 = 20;
        swapByReference(&n1, &n2);
        printf("n1: %d, n2: %d\n", n1, n2);
    }
    void swapByReference(int *a, int *b){
        int t;
        t = *a; *a = *b; *b = t;
    }
}

आउटपुट

n1: 20, n2: 10

  1. - MEAN.js और MEAN.io में अंतर?

    MEAN, MongoDB, Express, Angular, और Node.js का संक्षिप्त नाम है। MEAN.js और MEAN.io अनिवार्य रूप से एक ही चीजें हैं क्योंकि वे दोनों स्कैफोल्डेड एप्लिकेशन या ऊपर बताई गई 4 चीजों का उपयोग करने के लिए बेसिक सेटअप हैं। ये लाइब्रेरीज/टूल्स आपके लिए पहले से ही ये सेटअप करते हैं। ये आपको बेसिक इंफ्रास्ट्

  1. - जावास्क्रिप्ट में वर्गों के योग और योग के वर्ग के बीच अंतर

    हमें एक जावास्क्रिप्ट फ़ंक्शन लिखना है जो एक संख्या, मान लीजिए n, को एकमात्र इनपुट के रूप में लेता है। फ़ंक्शन को -पहले n प्राकृतिक संख्याओं के वर्गों का योग निकालना चाहिए।पहले n प्राकृतिक संख्याओं के योग का वर्ग निकालना चाहिए।दोनों आंकड़ों के बीच का निरपेक्ष अंतर लौटाना चाहिए।उदाहरण के लिए: यदि n =

  1. सेलपैडिंग और सेलस्पेसिंग के बीच अंतर सेलपैडिंग और सेलस्पेसिंग के बीच अंतर

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