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

C भाषा में पॉइंटर्स की अवधारणा समझें

पॉइंटर एक वेरिएबल है जो दूसरे वेरिएबल का पता संग्रहीत करता है।

पॉइंटर्स की विशेषताएं

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

सिंटैक्स

pointer = &variable;

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

#include <stdio.h> 

int main() {
    int x = 40;      // वेरिएबल घोषणा
    int *p;          // पॉइंटर वेरिएबल घोषणा
    p = &x;          // वेरिएबल x का पता पॉइंटर p में स्टोर करें
    
    printf("Address in p: %p\n", (void*)p);   // पता एक्सेस करना
    printf("Value in p: %d\n", *p);           // मान एक्सेस करना (डीरेफरेंसिंग)
    
    return 0;
}

आउटपुट

Address in p: 0x7ffee4b8c9ac
Value in p: 40

ऑपरेटर्स

ऑपरेटरउद्देश्य
* (एस्टेरिस्क)दो उद्देश्य: 1) पॉइंटर घोषणा (int *p), 2) डीरेफरेंसिंग - संदर्भित वेरिएबल का मान लौटाता है (*p)
& (एम्परसैंड)एक उद्देश्य: वेरिएबल का पता लौटाता है (&x)

महत्वपूर्ण कॉन्सेप्ट्स

1. पॉइंटर और सरणी

int arr[5] = {10, 20, 30, 40, 50};
int *p = arr;        // arr का बेस पता (=&arr[0])
p[2] == *(p+2) == arr[2] == 30  // सभी समान

2. पॉइंटर अंकगणित

int *p = &arr[0];
p++;        // अगला इंट (4 बाइट्स आगे)
p += 3;     // 3 इंट्स आगे
p--;        // पिछला इंट

3. पॉइंटर टू पॉइंटर

int x = 10;
int *p = &x;
int **pp = &p;
printf("%d", **pp);  // 10

4. कॉन्स्ट पॉइंटर्स

int value = 10;
const int *p1 = &value;    // पॉइंटर टू कॉन्स्ट: *p1 नहीं बदल सकते
int *const p2 = &value;    // कॉन्स्ट पॉइंटर: p2 नहीं बदल सकते
const int *const p3 = &value; // दोनों कॉन्स्ट

5. डायनामिक मेमोरी आवंटन

int *p = malloc(10 * sizeof(int));
if(p) {
    // उपयोग करें
    free(p);
    p = NULL;  // डैंगलिंग पॉइंटर रोकें
}

सामान्य गलतियां

  1. अनइनिशियलाइज़्ड पॉइंटर डीरेफरेंस: int *p; *p = 10; (क्रैश)
  2. मुक्त मेमोरी एक्सेस: free(p); *p = 10; (डैंगलिंग)
  3. मेमोरी लीक: p = malloc(...); p = malloc(...); (पहला ब्लॉक खो गया)
  4. गलत फॉर्मेट स्पेसिफायर: printf("%d", p); → printf("%p", (void*)p); उपयोग करें

सर्वोत्तम अभ्यास

  • घोषणा पर इनिशियलाइज़ करें: int *p = NULL;
  • डीरेफरेंस से पहले NULL चेक करें।
  • const सहीता का उपयोग करें।
  • आधुनिक C में restrict कीवर्ड पर विचार करें।
  1. C प्रोग्रामिंग भाषा में पॉइंटर्स के ऐरे को समझें C प्रोग्रामिंग भाषा में पॉइंटर्स के ऐरे को समझें

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

  1. C भाषा में यूनियन टू पॉइंटर (Union to Pointer) C भाषा में यूनियन टू पॉइंटर (Union to Pointer)

    यूनियन (Union) क्या है? यूनियन एक यूजर-डिफाइंड डेटा प्रकार है जो एक ही मेमोरी स्थान को विभिन्न डेटा प्रकारों के सदस्यों के लिए साझा करने की अनुमति देता है। किसी भी समय केवल एक सदस्य ही मान रख सकता है। यूनियन की घोषणा union यूनियन_नाम { डेटा_प्रकार सदस्य1; डेटा_प्रकार सदस्य2; // ... };

  1. C भाषा में पॉइंटर एक्सेस करने की अवधारणा C भाषा में पॉइंटर एक्सेस करने की अवधारणा

    पॉइंटर घोषणा, प्रारंभिकरण और एक्सेस 1. सामान्य चर int qty = 179; // मेमोरी में: पता 1000 पर मान 179 संग्रहीत 2. पॉइंटर घोषणा int *p; // p एक पॉइंटर चर है जो int का पता रख सकता है 3. पॉइंटर प्रारंभिकरण int qty = 175; int *p; p = &qty; // एड्रेस-ऑफ ऑपरेटर (&) से पता प्राप्त करें मेमोरी आर