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

C# में Pointers (पॉइंटर्स) क्या हैं?

C# में पॉइंटर्स (Pointers)

पॉइंटर एक वेरिएबल है जो **दूसरे वेरिएबल का मेमोरी एड्रेस** स्टोर करता है। C# में पॉइंटर्स केवल unsafe कॉन्टेक्स्ट में अनुमत हैं क्योंकि वे टाइप सेफ्टी और मेमोरी सेफ्टी को बायपास करते हैं।

सिंटैक्स

type* variableName; // C# स्टाइल
// उदाहरण:
int* p;       // int पॉइंटर
double* d;    // double पॉइंटर
char* c;      // char पॉइंटर

मुख्य ऑपरेटर्स

ऑपरेटरनामकार्य
&एड्रेस-ऑफवेरिएबल का मेमोरी एड्रेस देता है
*डिरेफरेंसपॉइंटर पर स्टोर एड्रेस पर वैल्यू एक्सेस/मोडिफाई
->मेंबर एक्सेसस्ट्रक्चर पॉइंटर के लिए: p->Member = (*p).Member
[]इंडेक्सरपॉइंटर अंकगणित: p[i] = *(p + i)

उदाहरण: बेसिक पॉइंटर उपयोग

using System;

class Program {
    static unsafe void Main() {
        int val = 50;
        int* ptr = &val; // val का एड्रेस
        
        Console.WriteLine($"Data: {val}");
        Console.WriteLine($"Address: {(long)ptr:X}"); // हेक्स में एड्रेस
        Console.WriteLine($"Value via pointer: {*ptr}");
        
        // पॉइंटर के माध्यम से वैल्यू बदलें
        *ptr = 100;
        Console.WriteLine($"New val: {val}"); // 100
    }
}

आउटपुट

Data: 50
Address: 00000012345678 (उदाहरण)
Value via pointer: 50
New val: 100

पॉइंटर टाइप्स

  • केवल **अनमैनेज्ड टाइप्स** (प्रिमिटिव्स, एनम्स, पॉइंटर्स, केवल अनमैनेज्ड फील्ड्स वाले स्ट्रक्चर्स) के पॉइंटर्स बना सकते हैं।
  • रेफरेंस टाइप्स (क्लासेस, स्ट्रिंग्स, एरे, डेलीगेट्स) के पॉइंटर्स **नहीं** बना सकते (GC उन्हें मूव कर सकता है)।
  • void* जेनेरिक पॉइंटर (किसी भी टाइप को पॉइंट कर सकता है, डिरेफरेंस नहीं कर सकता)।

fixed स्टेटमेंट (पिनिंग)

मूवेबल वेरिएबल्स (एरे, स्ट्रिंग) को पिन करने के लिए:

int[] arr = { 1, 2, 3 };
fixed (int* p = &arr[0]) {
    // GC arr को नहीं मूव करेगा
    Console.WriteLine(*p); // 1
    Console.WriteLine(p[1]); // 2
}

कंपाइलर सेटिंग

  • Visual Studio: Project Properties → Build → "Allow unsafe code" चेक करें।
  • कमांड लाइन: csc /unsafe Program.cs
  • .csproj: <AllowUnsafeBlocks>true</AllowUnsafeBlocks>

चेतावनी

पॉइंटर्स मेमोरी करप्शन, सिक्योरिटी होल्स, और डीबगिंग-हार्ड बग्स ला सकते हैं। 99% C# कोड में अनावश्यक हैं। ref/out, Span<T>, Memory<T>, ArrayPool प्रीफर करें।

  1. - जावास्क्रिप्ट आइडेंटिफायर्स क्या हैं?

    जावास्क्रिप्ट आइडेंटिफायर्स वेरिएबल्स, फंक्शन्स आदि को दिए गए नाम हैं। यह C, C++, Java आदि जैसी अन्य प्रोग्रामिंग भाषाओं में आइडेंटिफायर्स के समान है। आइए वेरिएबल नामों के लिए आइडेंटिफायर्स देखें।निम्नलिखित वैध वेरिएबल नाम हैं:val val1 resultजावास्क्रिप्ट में अपने वेरिएबल्स का नामकरण करते समय, निम्न

  1. - वेरिएबल ट्रांसफॉर्मेशन क्या है?

    एक वेरिएबल ट्रांसफॉर्मेशन एक ट्रांसफॉर्मेशन को परिभाषित करता है जिसका उपयोग किसी चर के कुछ मूल्यों पर किया जाता है। अन्य शब्दों में, प्रत्येक वस्तु के लिए, क्रांति उस वस्तु के लिए चर के मूल्य पर उपयोग की जाती है। उदाहरण के लिए, यदि केवल एक चर का महत्व आवश्यक है, तो चर के मूल्यों को निरपेक्ष मूल्य ब

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

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