सी ++ पॉइंटर्स

इस ट्यूटोरियल में, हम C ++ में पॉइंटर्स और उनके उदाहरणों की मदद से काम करने के बारे में जानेंगे।

C ++ में, पॉइंटर्स वैरिएबल होते हैं जो अन्य वेरिएबल्स के मेमोरी एड्रेस को स्टोर करते हैं।

C ++ में पता

यदि हमारे पास हमारे कार्यक्रम में एक चर संस्करण है, और var हमें स्मृति में अपना पता देगा। उदाहरण के लिए,

उदाहरण 1: C ++ में परिवर्तनीय पते की छपाई

 #include using namespace std; int main() ( // declare variables int var1 = 3; int var2 = 24; int var3 = 17; // print address of var1 cout << "Address of var1: "<< &var1 << endl; // print address of var2 cout << "Address of var2: " << &var2 << endl; // print address of var3 cout << "Address of var3: " << &var3 << endl; )

आउटपुट

 Var1 का पता: 0x7fff5fbff8ac var2 का पता: 0x7fff5fbff8a8 var3 का पता: 0x7fff5fbff8a4

यहाँ, 0xशुरुआत में पता हेक्साडेसिमल रूप में है।

ध्यान दें कि पहला पता 4 बाइट्स से अलग है और दूसरा एड्रेस तीसरे से 4 बाइट्स से अलग है।

ऐसा इसलिए है क्योंकि int64-बिट सिस्टम में एक चर का आकार 4 बाइट्स है।

नोट: जब आप प्रोग्राम चलाते हैं तो आपको वही परिणाम नहीं मिलते हैं।

सी ++ पॉइंटर्स

जैसा कि ऊपर उल्लेख किया गया है, पॉइंटर्स का उपयोग मूल्यों के बजाय पते को संग्रहीत करने के लिए किया जाता है।

यहां बताया गया है कि हम संकेत कैसे दे सकते हैं।

 int *pointVar;

यहाँ, हमने एक पॉइंटर पॉइंटर टाइप का घोषित किया है int

हम निम्नलिखित तरीके से भी संकेत दे सकते हैं।

 int* pointVar; // preferred syntax

आइए पॉइंटर्स घोषित करने का एक और उदाहरण लेते हैं।

 int* pointVar, p;

यहां, हमने एक पॉइंटर पॉइन्वार और एक सामान्य चर p घोषित किया है।
नोट:* ऑपरेटर घोषित संकेत करने के लिए डेटा प्रकार के बाद किया जाता है।

पॉइंटर्स को एड्रेस असाइन करना

यहां बताया गया है कि हम संकेत करने वालों को पते कैसे दे सकते हैं:

 int* pointVar, var; var = 5; // assign address of var to pointVar pointer pointVar = &var;

यहाँ, 5चर संस्करण को सौंपा गया है। और, var का पता कोड के साथ पॉइंटवीयर पॉइंटर को सौंपा गया है pointVar = &var

पॉइंटर्स पॉइंटिंग पॉइंट से मान प्राप्त करें

एक पॉइंटर द्वारा इंगित मूल्य प्राप्त करने के लिए, हम *ऑपरेटर का उपयोग करते हैं । उदाहरण के लिए:

 int* pointVar, var; var = 5; // assign address of var to pointVar pointVar = &var; // access value pointed by pointVar cout << *pointVar << endl; // Output: 5

उपरोक्त कोड में, var का पता पॉइंटविअर को सौंपा गया है। हमने *pointVarउस पते में संग्रहीत मान प्राप्त करने के लिए उपयोग किया है ।

जब *पॉइंटर्स के साथ प्रयोग किया जाता है, तो इसे डीरेफेरेंस ऑपरेटर कहा जाता है । यह एक पॉइंटर पर संचालित होता है और पॉइंटर में स्टोर किए गए पते द्वारा इंगित मूल्य देता है। यही कारण है, *pointVar = var

नोट: C ++ में, pointVar और * pointVar पूरी तरह से अलग है। हम ऐसा कुछ नहीं कर सकते*pointVar = &var;

उदाहरण 2: C ++ पॉइंटर्स का कार्य करना

 #include using namespace std; int main() ( int var = 5; // declare pointer variable int* pointVar; // store address of var pointVar = &var; // print value of var cout << "var = " << var << endl; // print address of var cout << "Address of var (&var) = " << &var << endl << endl; // print pointer pointVar cout << "pointVar = " << pointVar << endl; // print the content of the address pointVar points to cout << "Content of the address pointed to by pointVar (*pointVar) = " << *pointVar << endl; return 0; )

आउटपुट

 var = 5 पता का var (& var) = 0x61ff08 pointVar = 0x61ff08 प्वॉइंट द्वारा इंगित पते की सामग्री (* pointVar) = 5
C ++ पॉइंटर्स का कार्य करना

पॉइंटर्स द्वारा परिवर्तित मूल्य

अगर पॉइंटर, var के पते की ओर इशारा करता है, तो हम * पॉइंटVar का उपयोग करके var के मान को बदल सकते हैं।

उदाहरण के लिए,

 int var = 5; int* pointVar; // assign address of var pointVar = &var; // change value at address pointVar *pointVar = 1; cout << var << endl; // Output: 1

यहाँ, पॉइंट वीयर और &varएक ही पता है, जब * पॉइंट वीवर को बदल दिया जाएगा, तो var का मान भी बदल जाएगा।

उदाहरण 3: पॉइंटर्स द्वारा परिवर्तित मूल्य

 #include using namespace std; int main() ( int var = 5; int* pointVar; // store address of var pointVar = &var; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl << endl; cout << "Changing value of var to 7:" << endl; // change value of var to 7 var = 7; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl << endl; cout << "Changing value of *pointVar to 16:" << endl; // change value of var to 16 *pointVar = 16; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl; return 0; )

आउटपुट

 var = 5 * pointVar = 5 से var का मान बदलकर 7: var = 7 * pointVar = 7 में * pointVar का मूल्य बदलकर 16: var = 16 * pointVar = 16 

संकेत के साथ काम करते समय सामान्य गलतियाँ

मान लीजिए, हम चाहते हैं कि एक पॉइंटर varPoint, var के पते पर इंगित करे। फिर,

 int var, *varPoint; // Wrong! // varPoint is an address but var is not varPoint = var; // Wrong! // &var is an address // *varPoint is the value stored in &var *varPoint = &var; // Correct! // varPoint is an address and so is &var varPoint = &var; // Correct! // both *varPoint and var are values *varPoint = var;

अनुशंसित रीडिंग :

  • शून्य पॉइंटर का उपयोग करके जेनेरिक डेटा टाइप पॉइंटर्स का उपयोग कैसे करें?
  • एक सूचक का उपयोग करके एक सरणी का प्रतिनिधित्व कैसे करें?
  • कार्यों के साथ पॉइंटर्स का उपयोग कैसे करें?
  • संरचनाओं के साथ पॉइंटर्स का उपयोग कैसे करें?

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