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

C भाषा में विभिन्न पॉइंटर ऑपरेशन्स और पॉइंटर्स की समस्याएं

पॉइंटर एक वेरिएबल है जिसका मान दूसरे वेरिएबल का पता होता है, यानी मेमोरी लोकेशन का सीधा पता। किसी भी वेरिएबल या कॉन्स्टेंट की तरह, इसका उपयोग करने से पहले पॉइंटर घोषित करना आवश्यक है।

मेमोरी प्रतिनिधित्व

int qty = 179;

मेमोरी में प्रतिनिधित्व: qty नामक वेरिएबल, पता 5000 पर, मान 179 संग्रहीत करता है।

पॉइंटर घोषित करना और आरंभ करना

int *p;        // पॉइंटर घोषणा
p = &qty;      // एड्रेस ऑपरेटर (&) से आरंभीकरण

अब p में 5000 (qty का पता) है।

मान एक्सेस करना (डीरेफरेंसिंग)

इनडायरेक्शन ऑपरेटर (*) का उपयोग करके पते पर संग्रहीत मान एक्सेस करें:

n = *p;  // n को 179 मान मिलता है

विभिन्न पॉइंटर ऑपरेशन्स

ऑपरेशनविवरणउदाहरण
असाइनमेंटपते को पॉइंटर में असाइन करनाp = &qty;
मान खोजना (डीरेफरेंसिंग)* ऑपरेटर से मान प्राप्त करनाn = *p;
पॉइंटर का पता लेनापॉइंटर स्वयं कहां संग्रहीत है&p
पॉइंटर में इंटीजर जोड़नाp + n - n एलिमेंट्स आगे बढ़ता हैp + 3 (3 इंट आगे)
पॉइंटर इन्क्रीमेंटसरणी में अगला एलिमेंटp++ या ++p
पॉइंटर से इंटीजर घटानाp - n - n एलिमेंट्स पीछेp - 2
पॉइंटर डिक्रीमेंटपिछला एलिमेंटp-- या --p
पॉइंटर्स घटानादो पॉइंटर्स का अंतर (एलिमेंट्स की संख्या)p2 - p1
तुलनारिलेशनल ऑपरेटर्स से पते तुलनाp1 < p2

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

#include <stdio.h> 

int main() {
    int x, y;
    int *p;  // पॉइंटर घोषणा
    
    x = 10;
    p = &x;      // पते को असाइन करना
    y = *p;      // मान खोजना (डीरेफरेंसिंग)
    
    printf("Value of x = %d\n", x);
    printf("Address of x = %p\n", (void*)&x);
    printf("Value via pointer = %d\n", *p);
    printf("Address via pointer = %p\n", (void*)p);
    printf("Value of x in y = %d\n", y);
    
    *p = 25;     // पॉइंटर के माध्यम से मान बदलना
    printf("Now x = %d\n", x);
    
    return 0;
}

आउटपुट

Value of x = 10
Address of x = 0x7ffee4b8c9ac
Value via pointer = 10
Address via pointer = 0x7ffee4b8c9ac
Value of x in y = 10
Now x = 25

पॉइंटर्स के साथ सामान्य समस्याएं

  1. अनइनिशियलाइज़्ड पॉइंटर (वाइल्ड पॉइंटर) - यादृच्छिक पते पर इंगित करता है, क्रैश का कारण बनता है।
  2. डैंगलिंग पॉइंटर - मुक्त की गई मेमोरी को इंगित करता है।
  3. मेमोरी लीक - आवंटित मेमोरी मुक्त नहीं करना।
  4. बफर ओवरफ्लो - सीमा से बाहर लिखना।
  5. नल पॉइंटर डीरेफरेंस - NULL पॉइंटर को डीरेफरेंस करना।

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

  • पॉइंटर्स को हमेशा इनिशियलाइज़ करें: int *p = NULL; या int *p = &var;
  • डीरेफरेंस करने से पहले NULL चेक करें।
  • malloc के बाद free का उपयोग करें।
  • मुक्त करने के बाद पॉइंटर को NULL सेट करें।
  • सरणी बाउंड्स चेक करें।
  1. C भाषा में लूप कंट्रोल स्टेटमेंट्स क्या हैं? फ्लो चार्ट और प्रोग्राम के साथ समझाएं C भाषा में लूप कंट्रोल स्टेटमेंट्स क्या हैं? फ्लो चार्ट और प्रोग्राम के साथ समझाएं

    लूप कंट्रोल स्टेटमेंट्स स्टेटमेंट्स के सेट को दोहराने के लिए उपयोग किए जाते हैं। वे हैं: for लूप while लूप do-while लूप for लूप सिंटैक्स for(initialization; condition; increment/decrement) { // लूप बॉडी } फ्लो चार्ट (Condition पर वापस) आरंभीकरण - आमतौर पर एक असाइनमेंट स्टेटमेंट जो लूप क

  1. C भाषा में खोज तकनीकें (Searching Techniques) C भाषा में खोज तकनीकें (Searching Techniques)

    खोज (Searching) का परिचय खोज तकनीक का अर्थ है किसी सूची में किसी कुंजी तत्व (key element) को ढूंढना। यदि तत्व मिल जाता है तो खोज सफल (successful), अन्यथा असफल (unsuccessful) होती है। C में दो प्रमुख खोज तकनीकें रैखिक खोज (Linear Search) द्विआधारी खोज (Binary Search) 1. रैखिक खोज (Linear Search)

  1. C भाषा में अप्रत्यक्ष और स्पष्ट प्रकार रूपांतरण (Implicit and Explicit Type Conversion) C भाषा में अप्रत्यक्ष और स्पष्ट प्रकार रूपांतरण (Implicit and Explicit Type Conversion)

    प्रकार रूपांतरण (Type Conversion) एक डेटा प्रकार के मान को दूसरे डेटा प्रकार में बदलना। दो प्रकार: अप्रत्यक्ष (Implicit) - कंपाइलर स्वतः करता है स्पष्ट (Explicit) - प्रोग्रामर कास्ट ऑपरेटर से करता है 1. अप्रत्यक्ष प्रकार रूपांतरण (Implicit Type Conversion) कंपाइलर द्वारा स्वतः जब ऑपरेंड्स अलग प