C ++ पॉइंटर्स और एरेस

इस ट्यूटोरियल में, हम उदाहरणों की सहायता से सरणियों और बिंदुओं के बीच के संबंध के बारे में जानेंगे।

C ++ में, पॉइंटर्स वैरिएबल होते हैं जो अन्य वैरिएबल्स के पते रखते हैं। न केवल एक संकेतक एक एकल चर के पते को संग्रहीत कर सकता है, बल्कि यह किसी सरणी के कक्षों का पता भी संग्रहीत कर सकता है।

इस उदाहरण पर विचार करें:

 int *ptr; int arr(5); // store the address of the first // element of arr in ptr ptr = arr;

यहाँ, ptr एक पॉइंटर वैरिएबल है जबकि intअरै एक अरै है। कोड ptr = arr;चर ptr में सरणी के पहले तत्व का पता संग्रहीत करता है।

ध्यान दें कि हमने arrइसके बजाय उपयोग किया है &arr(0)। ऐसा इसलिए है क्योंकि दोनों एक ही हैं। तो, नीचे दिया गया कोड ऊपर के कोड के समान है।

 int *ptr; int arr(5); ptr = &arr(0);

सरणी तत्वों के आराम के लिए पते के आधार पर दिया जाता है &arr(1), &arr(2), &arr(3), और &arr(4)

हर ऐरे एलीमेंट्स की ओर इशारा

मान लें कि हमें उसी पॉइंटर ptr का उपयोग करके सरणी के चौथे तत्व को इंगित करने की आवश्यकता है।

यहां, यदि ptr उपरोक्त उदाहरण में पहले तत्व ptr + 3को इंगित करता है तो चौथे तत्व को इंगित करेगा। उदाहरण के लिए,

 int *ptr; int arr(5); ptr = arr; ptr + 1 is equivalent to &arr(1); ptr + 2 is equivalent to &arr(2); ptr + 3 is equivalent to &arr(3); ptr + 4 is equivalent to &arr(4);

इसी तरह, हम एकल पॉइंटर का उपयोग करके तत्वों तक पहुंच सकते हैं। उदाहरण के लिए,

 // use dereference operator *ptr == arr(0); *(ptr + 1) is equivalent to arr(1); *(ptr + 2) is equivalent to arr(2); *(ptr + 3) is equivalent to arr(3); *(ptr + 4) is equivalent to arr(4);

मान लीजिये अगर हमने शुरुवात की है ptr = &arr(2);तो

 ptr - 2 is equivalent to &arr(0); ptr - 1 is equivalent to &arr(1); ptr + 1 is equivalent to &arr(3); ptr + 2 is equivalent to &arr(4);
Ar ++ के साथ C ++ पॉइंटर्स का कार्य करना

नोट: ptr और ptr + 1 के बीच का पता 4 बाइट्स से अलग है। ऐसा इसलिए है क्योंकि ptr एक intडेटा के लिए एक संकेतक है । और, 64-बिट ऑपरेटिंग सिस्टम में int का आकार 4 बाइट्स है।

इसी तरह, अगर सूचक ptr charडेटा टाइप करने के लिए इशारा कर रहा है , तो ptr और ptr + 1 के बीच का पता 1 बाइट है। ऐसा इसलिए है क्योंकि एक चरित्र का आकार 1 बाइट है।

उदाहरण 1: C ++ पॉइंटर्स और एरेस

 // C++ Program to display address of each element of an array #include using namespace std; int main() ( float arr(3); // declare pointer variable float *ptr; cout << "Displaying address using arrays: " << endl; // use for loop to print addresses of all array elements for (int i = 0; i < 3; ++i) ( cout << "&arr(" << i << ") = " << &arr(i) << endl; ) // ptr = &arr(0) ptr = arr; cout<<"Displaying address using pointers: "<< endl; // use for loop to print addresses of all array elements // using pointer notation for (int i = 0; i < 3; ++i) ( cout << "ptr + " << i << " = "<< ptr + i << endl; ) return 0; )

आउटपुट

 सरणियों का उपयोग करते हुए पता प्रदर्शित करना: और गिरफ्तारी (0) = 0x61fef4 और गिरफ्तारी (1) = 0x61fef4 और गिरफ्तारी (2) = 0x61fef8 संकेत का उपयोग करते हुए पता दिखाना: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

उपरोक्त कार्यक्रम में, हमने सबसे पहले पॉइंटर वेरिएबल ptr का उपयोग किए बिना एरे तत्वों के पते छापे।

फिर, हमने (0) ptr + 1के पते को इंगित करने के लिए, (1), और इसी तरह के पते को इंगित करने के लिए पॉइंटर ptr का उपयोग किया ।

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

हालांकि, हमें याद रखना चाहिए कि संकेत और सरणियाँ समान नहीं हैं।

ऐसे कुछ मामले हैं जहाँ सरणी नाम संकेत करने वालों के लिए क्षय नहीं करते हैं। अधिक जानने के लिए, इस पर जाएं: सरणी का नाम सूचक में कब नहीं क्षय होता है?

उदाहरण 2: सूचक के रूप में इस्तेमाल किया जाने वाला ऐरे नाम

 // C++ Program to insert and display data entered by using pointer notation. #include using namespace std; int main() ( float arr(5); // Insert data using pointer notation cout << "Enter 5 numbers: "; for (int i = 0; i > *(arr + i) ; ) // Display data using pointer notation cout << "Displaying data: " << endl; for (int i = 0; i < 5; ++i) ( // display value of arr(i) cout << *(arr + i) << endl ; ) return 0; )

आउटपुट

 5 नंबर दर्ज करें: 2.5 3.5 4.5 5 2 डेटा प्रदर्शित करना: 2.5 3.5 4.5 5 2

यहाँ,

  1. हमने पहले उपयोगकर्ता द्वारा दर्ज किए गए नंबर को सरणी अरेस्ट में संग्रहीत करने के लिए पॉइंटर नोटेशन का उपयोग किया था।

     cin>> *(arr + i) ;

    यह कोड नीचे दिए गए कोड के बराबर है:

     cin>> arr(i);

    ध्यान दें कि हमने एक अलग सूचक चर घोषित नहीं किया है, लेकिन हम सूचक संकेतन के लिए अरे नाम का उपयोग कर रहे हैं।

    जैसा कि हम पहले से ही जानते हैं, सरणी का नाम गिरफ्तार सरणी के पहले तत्व को इंगित करता है। इसलिए, हम एक पॉइंटर की तरह अभिनय करने के बारे में सोच सकते हैं।

  2. इसी तरह, हमने तब forसूचक संकेतन का उपयोग करके गिरफ्तारी के मूल्यों को प्रदर्शित करने के लिए लूप का उपयोग किया ।

     cout << *(arr + i) << endl ;

    यह कोड के बराबर है

     cout << arr(i) << endl ;

दिलचस्प लेख...