सी++ पॉइंटर अंकगणित

Si Po Intara Ankaganita



यह आलेख C++ में सूचक अंकगणित के बारे में है। पॉइंटर्स वेरिएबल होते हैं जो डेटा के मेमोरी एड्रेस को स्टोर करते हैं। पॉइंटर अंकगणित C++ प्रोग्रामिंग भाषा की दुनिया में एक शक्तिशाली पहचान है जो हमें विभिन्न अंकगणितीय परिचालनों से निपटने की अनुमति देता है जिसमें जोड़, गुणा, भाग, वेतन वृद्धि, कमी और घटाव में हमारे मेमोरी बफ़र्स में नया मेमोरी एड्रेस विकसित करने के लिए एक पॉइंटर शामिल होता है। . एक सूचक अंकगणित आसानी से गतिशील मेमोरी आवंटन बनाता है। इस C++ लेख में, हम सीखेंगे कि पॉइंटर्स की मदद से मेमोरी एड्रेस को विभिन्न तरीकों से कैसे हेरफेर किया जाए और उचित दिशानिर्देश और उदाहरण प्रदान किए जाएं।

परिदृश्य 1: पॉइंटर वृद्धि और कमी संचालन करता है

यहां, हम अलग-अलग मेमोरी एड्रेस तैयार करने के लिए पॉइंटर हेरफेर के बारे में सीखेंगे जिनके अलग-अलग उद्देश्य हैं। बढ़ते और घटते पॉइंटर्स भी लीवरेज पॉइंटर्स अंकगणित हैं जो डेटा प्रकार के आकार से गुणा किए गए एक कारक द्वारा पते को बढ़ाते या घटाते हैं, जिस पर वे इंगित कर रहे हैं। इस परिदृश्य से संबंधित कोड स्निपेट निम्नलिखित में संलग्न है:







#शामिल
नेमस्पेस एसटीडी का उपयोग करना;
स्थिरांक पूर्णांक Arr_Max = 5 ;
मुख्य प्रवेश बिंदु ( ) {
int कहां [ Arr_Max ] = { बीस , 150 , 270 } ;
int यहाँ * पीटीआर; // घोषित सूचक
पीटीआर = वर;
के लिए ( पूर्णांक मैं = 0 ; मैं < Arr_Max; मैं++ ) {
std::cout << 'तत्व का मेमोरी पता है: [' << मैं << '] = ' ;
std::cout << पीटीआर << एंडल;
अदालत << 'पते के विरुद्ध मान है [' << मैं << '] = ' ;
अदालत << * पीटीआर << एंडल;
std::cout << 'सूचक सफलतापूर्वक बढ़ाया गया' << एंडल;
पीटीआर++;
}
std::cout << 'वेतन वृद्धि से पहले सूचक पता' << पीटीआर << एंडल;
पीटीआर--;
std::cout << 'घटाने के बाद सूचक पता' << पीटीआर << एंडल;
वापस करना 0 ;
}


यहां, हम शुरुआत में ही कोड में एक आवश्यक लाइब्रेरी को परिभाषित करते हैं: ' '। हम मेमोरी में स्थान आरक्षित करने के लिए मेमोरी आवंटन को परिभाषित करते हैं जो 'Arr_Max=5' है। मुख्य फ़ंक्शन में, हम ऐरे को इनिशियलाइज़ करते हैं और मेमोरी साइज़ को उस ऐरे में पास करते हैं। इसके बाद, मेमोरी में मेमोरी एड्रेस को इंगित करने के लिए 'ptr' पॉइंटर घोषणा की भी आवश्यकता होती है।



हम पते तक पहुंचने के लिए ऐरे को पॉइंटर तक पास करते हैं। जैसा कि हम सभी जानते हैं, सरणियों में हमेशा अलग-अलग स्थानों पर कई आइटम होते हैं। इसलिए, हमें किसी सरणी के प्रत्येक तत्व तक पहुंचने के लिए 'सहायता' सूचक के साथ एक लूप की आवश्यकता थी। हर बार जब लूप निष्पादित होता है, तो हमें पॉइंटर अंकगणितीय 'पीटीआर++' इंक्रीमेंट ऑपरेटर की मदद से इस पते के विरुद्ध मेमोरी पता और मान प्राप्त होते हैं जो मेमोरी पते को मेमोरी के अगले पते पर स्थानांतरित कर देता है। लूप निष्पादन चक्र किसी सरणी के आकार पर निर्भर करता है। लूप के बाहर, हम केवल 'ptr- -' डिक्रीमेंट पॉइंटर का उपयोग करके पॉइंटर को पिछले मेमोरी एड्रेस पर वापस लाना चाहते हैं।



Execute>Compile & Run विकल्प पर क्लिक करके इस कोड को निष्पादित करें और आपको निम्नलिखित आउटपुट मिलेगा:






उम्मीद है, इस आउटपुट को समझना आसान होगा। मेमोरी पता और मान बदल गए हैं. पॉइंटर को एक स्थान से स्थानांतरित करना केवल C++ में इंक्रीमेंट पॉइंटर अंकगणित से ही संभव है।

परिदृश्य 2: C++ में दो पॉइंटर्स घटाना

इस परिदृश्य में, हम सीखेंगे कि C++ में दो या दो से अधिक पॉइंटर्स को कैसे घटाया जाए। सभी अंकगणितीय ऑपरेशन जिनमें घटाव आता है, महत्वपूर्ण प्रक्रियाएं हैं क्योंकि हम केवल दो पॉइंटर्स को एक साथ घटा सकते हैं यदि और केवल तभी जब उनका डेटा प्रकार समान हो।



पॉइंटर में जोड़, गुणा और भाग जैसे अन्य ऑपरेशन संभव नहीं हैं क्योंकि मेमोरी एड्रेसिंग में उनका कोई मतलब नहीं है। कोड स्निपेट निम्नलिखित में संलग्न है:

#शामिल करें
मुख्य प्रवेश बिंदु ( ) {
वह इशारा करता है [ ] = { 23 , 36 , 42 , 51 , 62 , 77 , 89 , 96 , 100 } ;
int यहाँ * ptrr1 = & उस के लिए [ 3 ] ; // तीसरे तत्व की ओर सूचक ( 42 )
int यहाँ * ptrr2 = & उस के लिए [ 6 ] ; // छठे तत्व की ओर सूचक ( 89 )
ptrdiff_t पीटीआरघटाना = पीटीआरआर2 - पीटीआरआर1;

std::cout << 'इन पते के बीच अंतर है:' << पीटीआरघटाना << 'तत्व' << std::endl;
वापस करना 0 ;
}


घटाव ऑपरेशन C++ में मेमोरी एड्रेस के बीच अंतर ढूंढ रहा है। मुख्य फ़ंक्शन में, हम एक सरणी लेते हैं जिसमें विभिन्न इंडेक्स पर अलग-अलग मान होते हैं। किसी ऐरे में, प्रत्येक इंडेक्स का एक अलग मेमोरी स्थान होता है। हम केवल सूचक अंकगणित की सहायता से दो सूचकों के बीच अंतर पा सकते हैं। यहां, हम एक विशेष पॉइंटर प्रकार 'ptrdiff_t' का उपयोग करते हैं जिसका उपयोग C++ में दो या दो से अधिक पॉइंटर्स के बीच अंतर खोजने के लिए किया जाना चाहिए।

इस कोड का आउटपुट निम्नलिखित में संलग्न है:


इन पतों के बीच का अंतर तत्व विज़ द्वारा है जो कि 3 है।

परिदृश्य 3: C++ में दो या दो से अधिक पॉइंटर्स की तुलना करें

इस परिदृश्य में, हम सीखेंगे कि '==', '<=', '>=', '<', '>' जैसे विभिन्न रिलेशनल ऑपरेटरों का उपयोग करके C++ में विभिन्न पॉइंटर्स की तुलना कैसे करें। हम पॉइंटर्स की तुलना केवल तभी कर सकते हैं यदि वे एक ही सरणी के तत्वों के पते की ओर इशारा करते हैं। याद रखें कि दो पॉइंटर्स की विभिन्न प्रकारों से तुलना करने से अपरिभाषित व्यवहार हो सकता है। पॉइंटर तुलना से संबंधित कोड स्निपेट का उल्लेख निम्नलिखित में किया गया है:

#शामिल करें
नेमस्पेस एसटीडी का उपयोग करना;
मुख्य प्रवेश बिंदु ( )
{
int arr1 [ 10 ] = { 4 , 7 , 9 , ग्यारह , 14 , 16 , 18 , बीस , 22 , 25 } ;
int यहाँ * पीटीआर1 = & गिरफ्तार1 [ 3 ] ;
int यहाँ * पीटीआर2 = & गिरफ्तार1 [ 6 ] ;
int यहाँ * ptr3 = & गिरफ्तार1 [ 8 ] ;
int यहाँ * पीटीआर4 = & गिरफ्तार1 [ 9 ] ;
अगर ( पीटीआर1 ==ptr2 )
{
std::cout << 'सूचक बराबर हैं' << एंडल;
}
अन्य अगर ( ptr3 < =ptr4 )
{
std::cout << 'ptr3, ptr4 से कम या उसके बराबर है' << अंतः ;;
}
अन्य
{
std::cout << 'किसी भी स्तर पर सूचकों की तुलना नहीं की जाती' << एंडल;
}
वापस करना 0 ;
}


यहां, हम 10 तत्वों के साथ एक सरणी लेते हैं। हम चार पॉइंटर्स घोषित करते हैं जो सरणी के एक अलग सूचकांक की ओर इशारा करते हैं। उसके बाद, हम इन चार पॉइंटर्स की तुलना विभिन्न स्थितियों में करते हैं जैसा कि दिए गए कोड में देखा गया है। 'if' स्थिति में, जांचें कि क्या 'ptr1' पॉइंटर 'ptr2' पॉइंटर के बराबर है, और फिर 'पॉइंटर्स बराबर हैं' प्रिंट करें। जब हमारे पास कई स्थितियाँ होती हैं जहाँ हम यह जाँचने के लिए 'अन्य यदि' स्थिति का उपयोग करते हैं कि क्या 'ptr3' पॉइंटर 'ptr4' पॉइंटर के बराबर से कम है। इतना सब होने के बाद पर क्लिक करें निष्पादित करें > संकलित करें और चलाएँ विकल्प।

इस कोड का आउटपुट निम्नलिखित में संलग्न है:


यह कंसोल स्क्रीन पर एक वैध स्थिति प्रदर्शित करता है और संकलन से बाहर निकलता है। 'ptr3' पॉइंटर में एक मान होता है जो 'ptr4' पॉइंटर पॉइंटर मान से कम या उसके बराबर होता है।

परिदृश्य 4: सूचक अंकगणित के साथ एक विषम संख्या प्रदर्शित करें

यहां, हम देखेंगे कि हम किसी पूर्णांक की सरणी के लिए मेमोरी को गतिशील रूप से कैसे आवंटित कर सकते हैं। इस मामले से संबंधित कोड स्निपेट निम्नलिखित में दिया गया है:

#शामिल करें
मुख्य प्रवेश बिंदु ( ) {
पूर्णांक संख्या [ ] = { 1 , 12 , 33 , 24 , पंद्रह , 776 , 71 , 18 , 29 , पचास } ;
int यहाँ * ptrr = संख्याएँ;
std::cout << 'सरणी में विषम संख्याएँ:' ;
के लिए ( पूर्णांक मैं = 0 ; मैं < 10 ; ++मैं ) {
अगर ( * ptrr % 2 ! = 0 ) {
std::cout << * ptrr << ' ' ;
}
पीटीआर++;
}
std::cout << std::endl;
वापस करना 0 ;
}


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

कोड निष्पादित करने के बाद, आउटपुट कंसोल स्क्रीन पर प्रदर्शित होता है जो निम्नलिखित में दिया गया है:


इस तरह, हम कंसोल स्क्रीन पर पॉइंटर अंकगणित का उपयोग करके विषम संख्याएँ प्रदर्शित कर सकते हैं।

निष्कर्ष

हम यहां यह निष्कर्ष निकालते हैं कि पॉइंटर अंकगणित सबसे प्रभावी उपकरण है जो C++ में विभिन्न ऑपरेशन करता है। सुनिश्चित करें कि सूचक समान डेटा प्रकार वाले सरणी के मान को बढ़ाता या घटाता है। हम C++ प्रोग्रामिंग भाषा में पॉइंटर अंकगणित की सहायता से किसी सरणी के मानों की तुलना उनके मेमोरी पते से कर सकते हैं। हम सूचक अंकगणित की सहायता से सरणी को पार कर सकते हैं और मेमोरी को आसानी से प्रबंधित कर सकते हैं।