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

C भाषा में कॉल बाय रेफरेंस (Call by Reference) क्या है?

कॉल बाय रेफरेंस (संदर्भ द्वारा कॉल)

कॉल बाय रेफरेंस में, आर्गुमेंट्स के पते (addresses) पास किए जाते हैं। फ़ंक्शन के अंदर, पते का उपयोग करके वास्तविक आर्गुमेंट को एक्सेस और संशोधित किया जाता है।

प्रोग्राम

#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

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

चरण-दर-चरण व्याख्या

चरणकोडक्या होता है
1main में a=10, b=20मेमोरी में a@1000, b@1004
2swap(&a, &b)पते 1000, 1004 पास होते हैं
3swap पैरामीटर: int *a, *ba=1000, b=1004 (पॉइंटर्स)
4temp = *atemp = 10 (1000 पर मान)
5*a = *b1000 पर मान = 20 (1004 पर मान)
6*b = temp1004 पर मान = 10
7फ़ंक्शन समाप्तmain के a, b अब 20, 10 हैं

मेमोरी चित्रण

main():                    swap():
+-------+-------+          +-------+-------+
| a: 10 | b: 20 |          | *a    | *b    |
| @1000 | @1004 |  ────►   | @1000 | @1004 |  (समान पते!)
+-------+-------+          +-------+-------+
                           | *a=20 | *b=10 |  (मूल मेमोरी बदल गई)
                           +-------+-------+

कॉल बाय वैल्यू vs कॉल बाय रेफरेंस

व्यावहारिक उदाहरण: एकाधिक मान वापस करना

#include <stdio.h>

void divide(int dividend, int divisor, int *quotient, int *remainder) {
    *quotient = dividend / divisor;
    *remainder = dividend % divisor;
}

int main() {
    int q, r;
    divide(17, 5, &q, &r);
    printf("भागफल: %d, शेषफल: %d\n", q, r);  // 3, 2
    return 0;
}

सावधानियां

  • NULL पॉइंटर पास न करें (सेगफॉल्ट होगा)
  • पता लेने के लिए & का उपयोग करें
  • मान एक्सेस/संशोधित करने के लिए * का उपयोग करें
  • सरणी नाम पहले से ही पता होता है: func(arr) ≡ func(&arr[0])
  1. - C++ में डबल एड्रेस ऑपरेटर (&&) क्या है?

    && C++11 मानक में परिभाषित एक नया रेफरेंस ऑपरेटर है। int&& a का अर्थ है a एक r-value रेफरेंस है। && आमतौर पर केवल फ़ंक्शन के पैरामीटर को घोषित करने के लिए उपयोग किया जाता है। और यह केवल एक r-value एक्सप्रेशन लेता है। सीधे शब्दों में कहें, एक r-value एक मान है जिसका मेमोरी एड

  1. - C# प्रोग्रामिंग क्या है?

    C# माइक्रोसॉफ्ट द्वारा विकसित एक आधुनिक, सामान्य-उद्देश्य, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा है।C# को कॉमन लैंग्वेज इंफ्रास्ट्रक्चर (CLI) के लिए डिज़ाइन किया गया है, जिसमें एक्जीक्यूटेबल कोड और रनटाइम वातावरण शामिल है जो विभिन्न हाई-लेवल लैंग्वेजेस को विभिन्न कंप्यूटर प्लेटफॉर्म और आर्किटेक्चर पर

  1. - C# में Dictionary क्या है?

    परिचय Dictionary<TKey, TValue> कुंजी-मान जोड़े का जेनेरिक कलेक्शन है। तेज़ लुकअप (O(1) औसत) के लिए हैश टेबल आधारित। System.Collections.Generic नेमस्पेस में। घोषणा और उपयोग using System; using System.Collections.Generic; public class Demo { public static void Main() { // घोषण

© कॉपीराइट https://in.wsxdn.com सर्वाधिकार सुरक्षित
विशेषताकॉल बाय वैल्यूकॉल बाय रेफरेंस
क्या पास होता हैमान की प्रतिपता (पॉइंटर)
मूल चर बदलता हैनहींहां
फ़ंक्शन सिग्नेचरvoid func(int x)void func(int *x)
कॉल साइटfunc(val)func(&val)
फ़ंक्शन के अंदर एक्सेससीधे xडीरेफरेंस *x
उपयोग मामलाकेवल पढ़ना, छोटे डेटासंशोधन, बड़े डेटा, एकाधिक रिटर्न