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

C++ में रेफरेंस पैरामीटर्स का उपयोग कैसे करें?

कॉल बाय रेफरेंस

यहां हम देखेंगे कि C++ में किसी वेरिएबल का रेफरेंस कैसे पास करें। इसे कभी-कभी "कॉल बाय रेफरेंस" कहा जाता है।

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

रेफरेंस द्वारा पास करने के लिए सिंटैक्स

// फ़ंक्शन डेफिनिशन: पैरामीटर्स रेफरेंस टाइप हैं
void swap(int &x, int &y) {
    int temp;
    temp = x;  // एड्रेस x पर वैल्यू सेव करें
    x = y;     // y को x में डालें
    y = temp;  // x को y में डालें
    return;
}

पूर्ण उदाहरण

#include <iostream>
using namespace std;

// फ़ंक्शन डिक्लेरेशन
void swap(int &x, int &y);

int main() {
    // लोकल वेरिएबल डिक्लेरेशन
    int a = 100;
    int b = 200;
    
    cout << "Before swap, value of a: " << a << endl;
    cout << "Before swap, value of b: " << b << endl;
    
    // वेरिएबल रेफरेंस का उपयोग करके मानों को स्वैप करने के लिए फ़ंक्शन कॉल करें
    swap(a, b);
    
    cout << "After swap, value of a: " << a << endl;
    cout << "After swap, value of b: " << b << endl;
    
    return 0;
}

// फ़ंक्शन डेफिनिशन
void swap(int &x, int &y) {
    int temp = x;
    x = y;
    y = temp;
}

आउटपुट

Before swap, value of a: 100
Before swap, value of b: 200
After swap, value of a: 200
After swap, value of b: 100

रेफरेंस पैरामीटर्स के लाभ

  • कॉपी से बचाता है: बड़े ऑब्जेक्ट्स के लिए कुशल
  • कॉलर को संशोधित करने की अनुमति देता है: आउटपुट पैरामीटर्स के लिए आवश्यक
  • पॉइंटर्स से साफ सिंटैक्स: डीरेफरेंसिंग की आवश्यकता नहीं
  • नल नहीं हो सकता: वैलिड ऑब्जेक्ट की गारंटी (पॉइंटर्स के विपरीत)

Const रेफरेंस: इनपुट-ओनली पैरामीटर्स

जब आपको ऑब्जेक्ट को संशोधित किए बिना पास करने की आवश्यकता हो (कॉपी से बचने के लिए):

// बड़ा ऑब्जेक्ट पढ़ने के लिए const रेफरेंस
void printInfo(const BigObject& obj) {
    // obj को संशोधित नहीं कर सकते - कंपाइल टाइम एरर
    cout << obj.getData() << endl;
}

// रेंज-बेस्ड फॉर लूप्स में भी उपयोगी
for (const auto& item : container) { ... }

रेफरेंस vs पॉइंटर पैरामीटर्स

पहलूरेफरेंस (T&)पॉइंटर (T*)
सिंटैक्सक्लीनर, कोई * या -> नहींडीरेफरेंसिंग आवश्यक
नल होने योग्यनहीं (बिना UB के)हां
रीसीटेबलनहींहां
डिफ़ॉल्ट आर्गुमेंटकठिनआसान (nullptr)
ऑप्शनल पैरामीटरनहींहां

रेफरेंस वापस करना

// खतरनाक: लोकल वेरिएबल का रेफरेंस न लौटाएं
int& bad() { int x = 5; return x; }  // UB!

// ठीक: static/ग्लोबल/मेंबर का रेफरेंस लौटाएं
int& getStaticCounter() {
    static int counter = 0;
    return counter;
}
  1. - C# में वैल्यू पैरामीटर, रेफरेंस पैरामीटर और आउटपुट पैरामीटर में अंतर

    वैल्यू पैरामीटर (Value Parameters) वैल्यू पैरामीटर में, आर्गुमेंट का वास्तविक मान फंक्शन के फॉर्मल पैरामीटर में कॉपी हो जाता है। फंक्शन के अंदर पैरामीटर में किए गए परिवर्तनों का आर्गुमेंट पर कोई प्रभाव नहीं पड़ता। यह C# में पैरामीटर पास करने का डिफ़ॉल्ट तरीका है। रेफरेंस पैरामीटर (Reference Parame

  1. - C# में मेथड को पैरामीटर्स पास करना

    C# में मेथड पैरामीटर्स पास करना C# डिफ़ॉल्ट रूप से **वैल्यू द्वारा पासिंग (Pass by Value)** करता है: मेथड को आर्गुमेंट की **कॉपी** मिलती है। मूल वेरिएबल अपरिवर्तित रहता है। रेफरेंस टाइप्स के लिए, रेफरेंस की कॉपी पास होती है (ऑब्जेक्ट नहीं)। पैरामीटर पासिंग मोड्स मोडकीवर्डविवरणउदाहरण वैल्यू द्वा

  1. - C# में वेरिएबल को रेफरेंस कैसे असाइन करें?

    वेरिएबल को रेफरेंस असाइन करने के लिए ref कीवर्ड का उपयोग करें। एक रेफरेंस पैरामीटर वेरिएबल के मेमोरी लोकेशन का रेफरेंस होता है। जब आप पैरामीटर्स को रेफरेंस द्वारा पास करते हैं, तो वैल्यू पैरामीटर्स के विपरीत, इन पैरामीटर्स के लिए नया स्टोरेज लोकेशन नहीं बनाया जाता। रेफरेंस पैरामीटर्स को ref कीवर्ड क