मुख्य सामग्री पर जाएं
मॉड्यूल 5 · पाठ 2 का 2पाठ्यक्रम में 12/18~15 min
मॉड्यूल पाठ (2/2)

सूचक

पॉइंटर्स C++ की सबसे शक्तिशाली और विशिष्ट विशेषताओं में से एक हैं। वे आपको कुशल संसाधन प्रबंधन और उच्च प्रदर्शन को सक्षम करते हुए सीधे कंप्यूटर की भौतिक मेमोरी तक पहुंचने की अनुमति देते हैं।


1. मेमोरी और एड्रेस क्या है?

आपके द्वारा अपने प्रोग्राम में घोषित किया गया प्रत्येक वेरिएबल रैम मेमोरी के एक सेल में संग्रहीत होता है। प्रत्येक सेल का एक अद्वितीय मेमोरी एड्रेस होता है (आमतौर पर हेक्साडेसिमल प्रारूप में व्यक्त किया जाता है, उदाहरण के लिए, 0x7ffee3bf87ac)।

C++ हमें एड्रेस-ऑफ़ ऑपरेटर & का उपयोग करके किसी भी वेरिएबल का मेमोरी एड्रेस प्राप्त करने की अनुमति देता है:

C++
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)

2. सूचक की परिभाषा

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

सिंटैक्स को डेटा प्रकार के बाद तारांकन * के उपयोग की आवश्यकता होती है:

C++
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x

3. डीरेफ़रेंस ऑपरेटर (*)

सूचक जिस पते पर इंगित करता है उस पते पर संग्रहीत मूल्य तक पहुंचने या संशोधित करने के लिए, हम डीरेफ़रेंस ऑपरेटर (या इनडायरेक्शन ऑपरेटर) का उपयोग करते हैं, जिसे प्रतीक * द्वारा भी दर्शाया जाता है:

C++
int x = 42;
int* ptr = &x;

std::cout << *ptr; // Prints 42 (the value ptr points to)

*ptr = 100; // Modifies the value of x through the pointer
std::cout << x;    // Now prints 100!

4. शून्य सूचक: nullptr

एक सूचक जो किसी वैध पते को इंगित नहीं करता है उसे nullptr कीवर्ड (C++11 में प्रस्तुत) के साथ प्रारंभ किया जाना चाहिए:

C++
int* ptr = nullptr; // Safe null pointer

खुद कोशिश करना

व्यायाम#cpp.m5.l2.e1
प्रयास: 0लोड हो रहा है...

मुख्य में, 42 से प्रारंभ किया गया एक पूर्णांक चर मान है। पूर्णांक पीटीआर के लिए एक सूचक घोषित करें जो मान के पते को इंगित करता है। मान का मान 100 पर सेट करने के लिए पीटीआर की डीरेफ़रेंसिंग का उपयोग करें, और अंत में std::cout का उपयोग करके मान प्रिंट करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

पॉइंटर को `int* ptr = &value;`के साथ घोषित करें,`*ptr = 100;`को डीरेफ़रेंस करके मान को संशोधित करें, और`std::cout << value;` प्रिंट करें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#cpp.m5.l2.e2
प्रयास: 0लोड हो रहा है...

एक फ़ंक्शन डबलवैल्यू को परिभाषित करें जो एक पॉइंटर को पूर्णांक (int * ptr) में स्वीकार करता है और उस मान को 2 से गुणा करता है (यदि पॉइंटर शून्य नहीं है)। मुख्य में, वेरिएबल संख्या का पता पास करते हुए डबलवैल्यू को कॉल करें और इसे प्रिंट करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

फ़ंक्शन को `int* ptr`स्वीकार करना होगा। अंदर,`*ptr = (_ptr) _ 2`का उपयोग करें। मुख्य रूप से इसे`doubleValue(&num);` से कॉल करें।

3 प्रयासों के बाद समाधान उपलब्ध है

Quiz#cpp.m5.l2.q1
तैयार

दिए गए कोड को देखते हुए, कौन सा एक्सप्रेशन आपको a के मान को सीधे संशोधित करके 10 पर सेट करने की अनुमति देता है?

C++
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?
उत्तर विकल्प