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

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


पॉइंटर घोषणा, प्रारंभिकरण और एक्सेस

1. सामान्य चर


int qty = 179;
// मेमोरी में: पता 1000 पर मान 179 संग्रहीत

2. पॉइंटर घोषणा


int *p;  // p एक पॉइंटर चर है जो int का पता रख सकता है

3. पॉइंटर प्रारंभिकरण


int qty = 175;
int *p;
p = &qty;  // एड्रेस-ऑफ ऑपरेटर (&) से पता प्राप्त करें

मेमोरी आरेख

qty (int)     : पता 0x7fff...a0, मान 175
p (int*)      : पता 0x7fff...a8, मान 0x7fff...a0 (qty का पता)
*p (डीरेफरेंस): मान 175 (qty के समान)

सरणी/स्ट्रिंग में पॉइंटर एक्सेस उदाहरण

#include <stdio.h>

int main() {
    char s[] = {'a', 'b', 'c', '\n', 'c', '\0'};
    char *p, *str, *str1;
    
    p = &s[3];      // '\n' (नई लाइन, ASCII 10) का पता
    str = p;        // str भी '\n' की ओर
    str1 = s;       // str1 'a' (ASCII 97) की ओर
    
    // ++*p: *p (10) को 11 करता है, मान 11 देता है
    // ++*str1: *str1 (97) को 98 करता है, मान 98 देता है
    // 11 + 98 - 32 = 77
    printf("%d\n", ++*p + ++*str1 - 32);
    
    return 0;
}

आउटपुट

77

चरण-दर-चरण गणना

s = ['a'(97), 'b'(98), 'c'(99), '\n'(10), 'c'(99), '\0'(0)]
     0      1      2       3       4       5

p = &s[3]        → '\n' (10) का पता
str = p          → '\n' (10) का पता
str1 = s         → 'a' (97) का पता

++*p   : *p था 10, अब 11, मान 11
++*str1: *str1 था 97, अब 98, मान 98

11 + 98 - 32 = 77

पॉइंटर एक्सेस के तरीके

सिंटैक्सनामउदाहरण
*ptrडीरेफरेंस (इनडायरेक्शन)मान प्राप्त करें/सेट करें
ptr[i]सरणी सबस्क्रिप्ट*(ptr + i) के बराबर
ptr->memberस्ट्रक्चर/यूनियन सदस्य(*ptr).member के बराबर
ptr + nपॉइंटर अंकगणितn तत्व आगे

सामान्य पैटर्न


// 1. सरणी पार करना
for (int *p = arr; p < arr + n; p++) {
    printf("%d ", *p);
}

// 2. स्ट्रिंग पार करना
for (char *p = str; *p; p++) {
    putchar(*p);
}

// 3. स्ट्रक्चर पॉइंटर
struct Node *curr = head;
while (curr) {
    printf("%d ", curr->data);
    curr = curr->next;
}

// 4. फंक्शन में आउटपुट पैरामीटर
void divide(int a, int b, int *quot, int *rem) {
    *quot = a / b;
    *rem = a % b;
}

सावधानियाँ

  • हमेशा उपयोग से पहले प्रारंभिकृत करें
  • NULL जांच करें डीरेफरेंस से पहले
  • मुक्त की गई मेमोरी एक्सेस न करें
  • सरणी सीमा के भीतर रहें
  • const सहीता: const int *p (मान स्थिर), int *const p (पॉइंटर स्थिर)
  1. C भाषा में कैरेक्टर ऑपरेशन्स को समझें C भाषा में कैरेक्टर ऑपरेशन्स को समझें

    C प्रोग्रामिंग भाषा में कैरेक्टर (A-Z या a-z), अंक (0-9), व्हाइट स्पेस, या विशेष प्रतीक हो सकते हैं। घोषणा (Declaration) C प्रोग्रामिंग में कैरेक्टर ऑपरेशन्स के लिए घोषणा निम्नलिखित है: char a = A; // कैरेक्टर कॉन्स्टेंट का उपयोग करके कैरेक्टर इनपुट/आउटपुट फंक्शन्स कैरेक्टर इनपुट/आउटपुट फंक्शन्स

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

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

  1. C# में क्लास की अवधारणा समझाएं C# में क्लास की अवधारणा समझाएं

    क्लास C# में आवश्यक प्रकारों में से एक है। हम क्लास को समस्या डोमेन से संबंधित ऑब्जेक्ट्स के लिए ब्लूप्रिंट के रूप में सोच सकते हैं। यह एक टेम्पलेट है जिससे हम ऑब्जेक्ट्स बनाते हैं, उस संरचना और व्यवहार को परिभाषित करते हुए जो इस क्लास से बने ऑब्जेक्ट्स के सेट द्वारा साझा किया जाएगा। सरल शब्दों में,