एरे और पॉइंटर के बीच अंतर

लेखक: Laura McKinney
निर्माण की तारीख: 1 अप्रैल 2021
डेट अपडेट करें: 14 मई 2024
Anonim
#7 Arrays and Pointer Arithmetic
वीडियो: #7 Arrays and Pointer Arithmetic

विषय


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

  1. तुलना चार्ट
  2. परिभाषा
  3. मुख्य अंतर
  4. निष्कर्ष

तुलना चार्ट

तुलना के लिए आधारसरणीसूचक
घोषणा// सी ++ में
प्रकार var_name;
// जावा में।
प्रकार का नाम;
var_name = नए प्रकार;
// सी ++ में
प्रकार * var_name;
काम कर रहेसजातीय डेटाटाइप के चर के मूल्य को संग्रहीत करता है।एक ही डेटाटाइप के दूसरे चर के पते को पॉइंटर चर डेटाटाइप के रूप में संग्रहीत करें।
पीढ़ीबिंदुओं की एक सरणी उत्पन्न की जा सकती है।एक सरणी के लिए एक पॉइंटर उत्पन्न किया जा सकता है।
जावा सपोर्टसरणी की अवधारणा का समर्थन करें।संकेत का समर्थन नहीं करता है।
भंडारणएक सामान्य सरणी चर और पॉइंटर सरणी का मान संग्रहीत करता है जो चर का पता संग्रहीत करता है।पॉइंटर्स विशेष रूप से चर के पते को स्टोर करने के लिए डिज़ाइन किए गए हैं।
क्षमतासरणी सरणी के आकार में वर्णित तत्वों की संख्या को संग्रहीत कर सकती है। एक पॉइंटर वैरिएबल एक समय में केवल एक वेरिएबल के पते को स्टोर कर सकता है।


ऐरे की परिभाषा

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

// में C ++ प्रकार var_name; // जावा में। प्रकार का नाम; var_name = नए प्रकार;

यहाँ 'प्रकार' एक सरणी चर के डेटा प्रकार को दर्शाता है, 'var_name' सरणी चर को दिए गए नाम को दर्शाता है, 'आकार' सरणी चर की क्षमता को दर्शाता है अर्थात 'सरणी' के कितने तत्व उस सरणी चर में संग्रहीत किए जा सकते हैं । एक सरणी तक पहुँचने के दो तरीके हैं, पहला ar पॉइंटर अंकगणित ’और दूसरा index एरे इंडेक्सिंग’, जिसमें से of पॉइंटर अंकगणित ’अधिक तेज़ है।


// पॉइंटर अंकगणितीय शून्य डिस्प्ले_अरे (int * S) {जबकि (* s) {cout (<<) का उपयोग करके एक्सेस करना है "<<< * s"; * एस ++; }}

Faster पॉइंटर अंकगणित का उपयोग करना ing ऐरे इंडेक्सिंग ’की तुलना में तेजी से काम करेगा, यानी इसके इंडेक्स का उपयोग करके ऐरे वेरिएबल तक पहुंचना। यदि आपको किसी फ़ंक्शन में पॉइंटर्स की एक सरणी को पास करने की आवश्यकता है, तो यह उसी विधि का उपयोग करके किया जा सकता है जिसे आप सामान्य सरणी पास करने के लिए उपयोग करते हैं अर्थात् सीधे किसी भी इंडेक्स के बिना फ़ंक्शन को सरणी के नाम से कॉल करते हैं।

इसे हम उदाहरण के साथ समझते हैं

// संकेत की सरणी की घोषणा। int * p;

यहाँ, यह दर्शाता है कि 'p' पूर्णांक प्रकार की एक सरणी है, यह पूर्णांक प्रकार के 10 चर का पता रखेगा। हमें एक फ़ंक्शन डिस्प्ले () में उपरोक्त पॉइंटर ऐरे पास करते हैं।

प्रदर्शन (पी); // फंक्शन डिस्प्ले को कॉल करें। शून्य प्रदर्शन (int * d) {// सूचक सरणी को प्राप्त करने का कार्य। for (int i = 0; i <10; i ++) {cout << ("index" <

यह फ़ंक्शन चर में मौजूद मानों को प्रदर्शित करेगा, जिनके पते इस सूचक सरणी में क्रमिक रूप से संग्रहीत हैं।

पॉइंटर की परिभाषा

पॉइंटर एक वैरिएबल है जो दूसरे वेरिएबल के मेमोरी एड्रेस को होल्ड करता है। दोनों का डेटाटाइप, पॉइंटर वैरिएबल और वैरिएबल जिसका एड्रेस एक पॉइंटर वैरिएबल को असाइन किया जा रहा है, समान होना चाहिए। पॉइंटर चर को निम्नानुसार घोषित किया गया है।

// C ++ प्रकार * नाम में घोषणा;

यहाँ, 'प्रकार' एक डेटा टाइप है, 'नाम' सूचक चर का नाम है। 'प्रकार' परिभाषित करता है कि किस प्रकार के चर का पता सूचक चर में संग्रहीत किया जा सकता है। उदाहरण के लिए, पूर्णांक सूचक पूर्णांक चर के पते को संग्रहीत करेगा। दो पॉइंटर ऑपरेटर and * ’और’ & ’हैं। ऑपरेटर, * पते पर स्थित मान लौटाता है, जिसे ’*’ चिह्न के बाद चर में संग्रहीत किया जाता है। The & 'ऑपरेटर वैरिएबल का पता देता है, जिसके बाद operator &' साइन होता है।

// उदाहरण के लिए int b = 10 int a = & b; // यहाँ b का पता वैरिएबल में संग्रहित है। // देता है b का पता 2000 है, इसलिए अब a = 2000 है। int c = * a; // यहाँ, पूर्णांक सूचक चर * a .ie में संग्रहीत पते पर स्थित मान लौटाएगा। ग = 10।

केवल दो अंकगणितीय ऑपरेटर हैं जो आप पॉइंटर्स पर जोड़ सकते हैं यानी जोड़ और घटाव। यदि आप एक पूर्णांक सूचक चर पर वेतन वृद्धि लागू करते हैं, तो यह डेटाटाइप के आकार से बढ़ जाएगा यानी 2 बाइट्स के रूप में, यह पूर्णांक सूचक है, वेतन वृद्धि पर इसे अगले पूर्णांक चर को इंगित करना होगा। इसी तरह की कमी है।

// p एक पूर्णांक सूचक कन्टेनिंग मान 2000 है। p ++; // अब पी = 2002। p--; // अब p फिर से 2000 के रूप में दो बाइट्स द्वारा घटाया जाता है।

  1. एक सरणी समान डेटा प्रकारों के चर को संग्रहीत करता है और चर के डेटा प्रकार को सरणी के प्रकार से मेल खाना चाहिए। दूसरी ओर, पॉइंटर वेरिएबल वेरिएबल के प्रकार को पॉइंटर वेरिएबल टाइप के समान टाइप करता है।
  2. हम पॉइंटर्स का एक सरणी उत्पन्न कर सकते हैं अर्थात् सरणी जिसका पॉइंटर पॉइंटर चर हैं। दूसरी ओर, हम एक पॉइंटर बना सकते हैं जो एक अरै की ओर इशारा करता है।
  3. जावा ऐरे को सपोर्ट करता है, लेकिन यह पॉइंटर्स को सपोर्ट नहीं करता है।
  4. एक सरणी आकार चर की संख्या तय करता है, जबकि यह स्टोर कर सकता है; एक पॉइंटर वैरिएबल केवल वैरिएबल के पते को स्टोर कर सकता है

ध्यान दें:

जावा समर्थन या कड़ाई से संकेत से बचने के लिए नहीं है।

निष्कर्ष:

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