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

C प्रोग्रामिंग में रेफरेंस और पॉइंटर समझाया गया

समस्या

उदाहरणों के साथ C प्रोग्रामिंग भाषा में रेफरेंस और पॉइंटर की अवधारणा समझाएं।

रेफरेंस (Reference) - C++ अवधारणा, C में नहीं

महत्वपूर्ण: C भाषा में मूल रूप से रेफरेंस का समर्थन नहीं है। रेफरेंस C++ की विशेषता है। C में हम पॉइंटर्स का उपयोग करके समान व्यवहार प्राप्त करते हैं।

लेख में "रेफरेंस" के रूप में वर्णित वास्तव में मान द्वारा पास करना (Pass by Value) है।

पॉइंटर (Pointer)

  • किसी चर का पता (address) संग्रहीत करता है
  • NULL मान धारण कर सकता है
  • संदर्भ द्वारा पास करना (Pass by Reference) सक्षम करता है
  • घोषणा के समय प्रारंभिकरण अनिवार्य नहीं

सिंटैक्स

डेटा_प्रकार *पॉइंटर_नाम;

उदाहरण: int *ptr; // ptr एक पूर्णांक का पता धारण करता है

पता असाइन करना

पॉइंटर_चर = &दूसरा_चर;

उदाहरण प्रोग्राम

#include <stdio.h>

int main() {
    int a = 2, b = 4;
    int *p;
    
    printf("a का पता = %p\n", (void*)&a);
    printf("b का पता = %p\n", (void*)&b);
    
    p = &a;  // p, a की ओर इंगित करता है
    printf("a का मान = %d\n", a);
    printf("*p का मान = %d\n", *p);  // a का मान प्रिंट करता है
    printf("p का मान (पता) = %p\n", (void*)p);
    
    p = &b;  // p अब b की ओर इंगित करता है
    printf("b का मान = %d\n", b);
    printf("*p का मान = %d\n", *p);  // b का मान प्रिंट करता है
    printf("p का मान (पता) = %p\n", (void*)p);
    
    return 0;
}

आउटपुट

a का पता = 0x7ffc1234567c
b का पता = 0x7ffc12345678
a का मान = 2
*p का मान = 2
p का मान (पता) = 0x7ffc1234567c
b का मान = 4
*p का मान = 4
p का मान (पता) = 0x7ffc12345678

पास बाय वैल्यू vs पास बाय रेफरेंस (पॉइंटर के माध्यम से)

पास बाय वैल्यू (मान द्वारा)

void swapByValue(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    // मूल चर अपरिवर्तित रहते हैं
}

पास बाय रेफरेंस (पॉइंटर द्वारा - C में अनुकरण)

void swapByReference(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
    // मूल चर बदल जाते हैं
}

int main() {
    int x = 10, y = 20;
    swapByReference(&x, &y);  // पते पास करें
    // अब x=20, y=10
}

तुलना तालिका

विशेषतापास बाय वैल्यूपास बाय रेफरेंस (पॉइंटर)
क्या पास होता हैमान की प्रतिपता
मूल चर प्रभावितनहींहां
मेमोरी उपयोगअधिक (कॉपी)कम
NULL संभवनहींहां
सिंटैक्ससरल& और * आवश्यक

पॉइंटर के सामान्य उपयोग

  • डायनामिक मेमोरी आवंटन (malloc, free)
  • सरणी/स्ट्रिंग मैनिपुलेशन
  • फ़ंक्शन से एकाधिक मान वापस करना
  • डेटा संरचनाएं (लिंक्ड लिस्ट, ट्री, ग्राफ)
  • हार्डवेयर एड्रेस एक्सेस (एम्बेडेड सिस्टम)
  1. C प्रोग्रामिंग भाषा में पॉइंटर्स के ऐरे को समझें C प्रोग्रामिंग भाषा में पॉइंटर्स के ऐरे को समझें

    पॉइंटर एक वेरिएबल है जो दूसरे वेरिएबल का पता स्टोर करता है। विशेषताएं पॉइंटर मेमोरी स्पेस बचाता है। सीधे मेमोरी लोकेशन एक्सेस के कारण पॉइंटर का एक्जीक्यूशन टाइम तेज होता है। पॉइंटर्स की मदद से, मेमोरी को कुशलता से एक्सेस किया जाता है, यानी मेमोरी को डायनामिकली एलोकेट और डीएलोकेट किया जाता है। पॉइ

  1. C भाषा में मोनोलिथिक और मॉड्यूलर प्रोग्रामिंग की व्याख्या C भाषा में मोनोलिथिक और मॉड्यूलर प्रोग्रामिंग की व्याख्या

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

  1. C# में मूल्य प्रकार और संदर्भ प्रकार की अवधारणा समझाएं और तुलना करें C# में मूल्य प्रकार और संदर्भ प्रकार की अवधारणा समझाएं और तुलना करें

    सामान्य तौर पर, C# में सभी प्रकारों को दो मुख्य श्रेणियों में विभाजित किया जा सकता है − मूल्य प्रकार और संदर्भ प्रकार। आइए प्रत्येक प्रकार को विस्तार से देखें।मूल्य प्रकारमूल्य प्रकार के वेरिएबल्स सीधे अपने डेटा को समाहित करते हैं। प्रत्येक वेरिएबल की अपने डेटा की अपनी कॉपी होती है। इसलिए मूल्