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

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


पॉइंटर क्या है?

पॉइंटर एक चर है जो दूसरे चर का मेमोरी पता संग्रहीत करता है। यह सीधे मेमोरी एक्सेस सक्षम करता है।

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

  • मेमोरी बचत: बड़े डेटा की कॉपी के बजाय पता पास करें
  • तेज निष्पादन: सीधा मेमोरी एक्सेस
  • डायनामिक मेमोरी: malloc/free के लिए आवश्यक
  • डेटा संरचनाएं: लिंक्ड लिस्ट, ट्री, ग्राफ के लिए मूलभूत

बुनियादी सिंटैक्स


int a = 10;       // सामान्य चर
int *p = &a;      // पॉइन्टर घोषणा + प्रारंभिकरण
printf("%d", *p); // डीरेफरेंस: 10 प्रिंट होगा

स्ट्रिंग/सरणी के साथ पॉइंटर अंकगणित


char str[] = "Hello";
char *p = str;        // str[0] का पता
printf("%c", *p);     // 'H'
printf("%c", *(p+1)); // 'e'
p++;                  // अगले वर्ण पर

उदाहरण 1: पॉइंटर अंकगणित प्रदर्शन

#include <stdio.h>

int main() {
    char array[] = "Tutorial";  // 8 वर्ण + \0
    char *ptr, *ptr1;
    int i;
    
    ptr = &array[1];      // 'u' का पता
    ptr1 = ptr + 3;       // 'u' से 3 आगे → 'r' का पता
    *ptr1 = 'e';          // 'r' को 'e' में बदलें (ASCII 101)
    
    // ptr से 4 वर्ण प्रिंट करें
    for (i = 0; i < 4; i++)
        printf("%c", *ptr++);  // u, t, o, e
    
    printf("\nसंशोधित सरणी: %s\n", array);  // Tutoeial
    return 0;
}

आउटपुट

utoe
संशोधित सरणी: Tutoeial

उदाहरण 2: और पॉइंटर अंकगणित

#include <stdio.h>

int main() {
    char string[] = "CprogRamming";
    char *p, *p1;
    int i;
    
    p = &string[5];   // 'R' का पता (0-आधारित: C p r o g R...)
    p1 = p + 3;       // 'R' से 3 आगे → 'm' का पता
    *p1 = 'e';        // 'm' को 'e' में बदलें
    
    for (i = 0; i < 4; i++)
        printf("%c", *p++);  // R, a, e, e
    
    printf("\nसंशोधित: %s\n", string);  // CprogRaeeing
    return 0;
}

आउटपुट

Raee
संशोधित: CprogRaeeing

पॉइंटर अंकगणित नियम

ऑपरेशनअर्थउदाहरण
ptr + nn तत्व आगे (प्रकार के आकार से गुणा)int* + 2 = 8 बाइट्स आगे
ptr - nn तत्व पीछे
ptr++अगले तत्व पर
ptr2 - ptr1तत्वों में अंतर (ptrdiff_t)सरणी में दूरी
*ptrमान एक्सेस (डीरेफरेंस)

सावधानियाँ

  • सरणी सीमा के बाहर पॉइंटर न ले जाएं (UB)
  • free() के बाद पॉइंटर उपयोग न करें (डैंगलिंग पॉइंटर)
  • अनारंभिकृत पॉइंटर डीरेफरेंस न करें
  • const char *p - पॉइंटर के माध्यम से संशोधन रोकता है

व्यावहारिक उपयोग: स्ट्रिंग लंबाई


size_t strlen_ptr(const char *s) {
    const char *p = s;
    while (*p) p++;
    return p - s;  // पॉइंटर अंतर = लंबाई
}
  1. C में पॉइंटर्स और ऐरे का संबंध C में पॉइंटर्स और ऐरे का संबंध

    पॉइंटर्स और ऐरे कंपाइलर ऐरे के सभी एलिमेंट्स के लिए सन्निहित मेमोरी लोकेशन्स आवंटित करता है। बेस एड्रेस पहले एलिमेंट का पता होता है। उदाहरण int a[5] = {10, 20, 30, 40, 50}; मेमोरी लेआउट (मान लें बेस एड्रेस 1000, int = 4 बाइट्स): एलिमेंटवैल्यूएड्रेस a[0]101000 a[1]201004 a[2]301008 a[3]401012 a[4]

  1. C प्रोग्राम: द्विघात समीकरण के मूल ज्ञात करना C प्रोग्राम: द्विघात समीकरण के मूल ज्ञात करना

    समस्या सॉफ्टवेयर डेवलपमेंट मेथड लागू करके C में द्विघात समीकरण के मूल ज्ञात करना। विश्लेषण इनपुट: a, b, c मान (समीकरण: ax² + bx + c = 0) आउटपुट: r1, r2 मूल प्रक्रिया रूट्स के सूत्र: r₁ = (-b + √(b² - 4ac)) / 2a r₂ = (-b - √(b² - 4ac)) / 2a एल्गोरिदम शुरुआत a, b, c पढ़ें d = b² - 4ac की गणना करें

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

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