पॉइंटर आणि संदर्भ दरम्यान फरक

Anonim

की फरक - पॉइंटर वि संदर्भ

पॉइंटर आणि संदर्भातील फरक यांच्यावर चर्चा करण्यापूर्वी आपण थोडक्यात या दोन शब्दांचा अर्थ पाहू. एका कार्यक्रमात, डेटा मेमरीवर कब्जा केला जातो. मेमरीचे नेमके स्थान ज्यात डेटा अंमलबजावणी वेळेत ठेवला गेला हे त्यांना उघडण्यासाठी माहित असणे आवश्यक आहे. पॉइंटर व्हेरिएबल्स आणि रेफरन्स व्हेरिएबल्स या डेटा ऍक्सेस करण्यासाठी आणि त्या मेमरी पत्ते ते हाताळण्यासाठी वापरले जातात. म्हणजेच, अप्रत्यक्षपणे वस्तूंचा संदर्भ देण्यासाठी दोन्ही पॉईंटर्स आणि संदर्भ वापरले जाऊ शकतात. ते मूलत: स्मृती पत्ते त्यांच्या मूल्ये म्हणून ठेवतात. मुख्य फरक पॉइंटर आणि एक संदर्भ दरम्यान एक पॉईन्टर एक वेरियेबल आहे जे दुसर्या व्हेरिएबल च्या मेमरी स्थानाचा पत्ता ठेवते आणि एक संदर्भ एक वेरियेबल आहे जो संदर्भित करतो दुसर्या व्हेरिएबलमध्ये दोन्ही यंत्रणा, ते संकेतक आणि संदर्भ, वेगळे वाक्यरचना आणि वापर आहे . पॉइंटर म्हणजे काय? एक पॉइंटर

संगणकीय मेमरीमध्ये

व्हॅल्यू

चे मेमरि एड्रेस संग्रहित करणारा प्रोग्रामिंग भाषा ऑब्जेक्ट C ++ वाक्यरचना; पूर्णांक मी = 5;

पूर्णांक * ptr = & i;

पहिली ओळ 5 व्हेरिएबल असलेल्या व्हेरिएबलला परिभाषित करते. दुसरी ओळ व्हेरिएबलच्या मेमरी एड्रेसला निर्देशित करते. येथे, 'पीटीआर' हा ऑब्जेक्टचा पत्ता आहे ज्याचे प्राथमिक व्हॅल्यू 'int to pointer to type' असे आहे. मूलतः त्याच्या स्मृती पत्त्यावर संचयित करून मी ptr व्हेरिएबल बिंदू.

स्मृती स्थानावर साठवले गेलेले मूल्य प्राप्त करणे

dereferencing

असे म्हटले जाते. * ऑपरेटर पॉइंटर डिरेफर करण्यासाठी वापरला जातो. घोषणा झाल्यानंतर, अप्रत्यक्ष अभिव्यक्ती * ptr dereferences ptr मी संदर्भित. i चे मूल्य बदलण्यासाठी, खालील अभिहस्तांकन वापरले जाऊ शकते; * पीटीआर = 20; वेगवेगळ्या वस्तूंचा संदर्भ देण्यासाठी पेन्टर्सला पुन्हा नियुक्त करता येईल.

A

नल पॉइंटर हा एक विशेष प्रकारचा पॉइंटर आहे. एक शून्य पॉइंटर सहसा 0 किंवा शून्य द्वारे दर्शविले जाते आणि काहीच नाही. पॉइंटरला नियुक्त केला जाणारा अचूक पत्ता नसल्याबद्दल नल पॉइंटर वापरणे हा चांगला अभ्यास आहे ही असाइनमेंट तार्किक ऑपरेशन आणि शर्तींमध्ये वापरली जाऊ शकते.

निर्देशक

गतिमान वाटप केलेल्या मेमरीच्या पत्ते संचयित आणि व्यवस्थापित करण्यासाठी वापरले जाऊ शकतात. पॉइंटर्सच्या उपयोगासह स्टॅक, रांगा, आणि यासारख्या डेटा स्ट्रक्चर्सची अंमलबजावणी आणि नियंत्रण करणे शक्य आहे. उदाहरणार्थ, एका क्यूमध्ये दोन पॉईंटर्स असू शकतात; प्रमुख सूचक आणि शेपूट पॉइंटरत्यांच्या पत्त्याद्वारे व्हेरिएबल्स पास करण्यासाठी पॉइंटर्सचाही वापर केला जाऊ शकतो, ज्यामुळे व्हॅल्यू बदलता येतात. थेटपणे मेमरी किंवा मेमरी-मॅप्ड डिव्हायसेस हाताळण्यासाठी पॉईंटर्सचा उपयोग करून हाताळू शकते. संकेतक संरक्षणात्मक आणि असुरक्षित प्रवेशासंदर्भातील मेमरिला परवानगी देतात. म्हणून, पॉइंटरची सामग्री वैध असल्याची पडताळणी करण्यासाठी आवश्यक खबरदारी घेणे आवश्यक आहे. अन्यथा, अवैध मेमरी अड्रेससह पॉईन्टरला दिल्यास प्रोग्राम क्रॅश होऊ शकते.

संकेतक सी, सी ++, पास्कल आणि अनेक विधानसभा भाषांसारख्या भाषांमध्ये समर्थित आहेत. पॉइंटर a

वेरियेबल b शी संबंधित मेमरी एड्रेसकडे निर्देश करणे.

संदर्भ काय आहे?

संदर्भ फक्त एक मेमरीमध्ये संग्रहित मूल्यासाठी वैकल्पिक ओळखकर्ता आहे तो अप्रत्यक्षरित्या एका विशिष्ट घटकास ऍक्सेस करण्यासाठी एक प्रोग्राम सक्षम करतो. C ++ वाक्यरचना;

पूर्णांक मी = 5;

इंटरेन्स = i; पहिली ओळ 5 व्हेरिएबल असलेल्या व्हेरिएबलला परिभाषित करते. दुसऱ्या ओळीत 'रेफरन्स' हा शब्द 'इंट्रेट संदर्भ' आहे, ज्याला मी संदर्भ देतो. स्मृतीमध्ये साठवलेले विशिष्ट डेटामधे भौतिक पत्ता म्हणून संदर्भ लागू केला जातो त्या संदर्भानुसार डेटाचा संदर्भ वेगळे आहे. एकदा परिभाषित केल्यानंतर, एका संदर्भास नवीन मूल्य पुनर्सोदेशित करता येत नाही. एखादा संदर्भ नेहमी ज्या वस्तूचा आरंभ केला जातो त्या वस्तूचा संदर्भ असतो. खालील अभिहस्तांकन मध्ये, अद्याप रिफ संदर्भित होतो, परंतु आता मूल्य 20 आहे.

ref = 20;

वरील उदाहरणाप्रमाणे, संदर्भांमध्ये Dereferencing साठी कोणत्याही ऑपरेटर्सची आवश्यकता नाही.

जेव्हा फरक नेहमी ऑब्जेक्ट चा संदर्भ घेतो तेव्हा संदर्भ वापरले जाऊ शकतात. हे असे आहे कारण, पॉइंटर्सपेक्षा वेगळे, संदर्भ निरर्थक असू शकत नाहीत आणि सुरुवातीला नेहमीच नियुक्त केले जाणे आवश्यक आहे. संदर्भांतून नेहमीच काही ऑब्जेक्ट पहाणे आवश्यक आहे, अशा एक वेरियेबल बनवण्यासाठी एक संदर्भ कार्यक्रम कार्यक्षमतेने आणि योग्यरित्या कार्य करेल याची खात्री हे समजते की, शून्य संदर्भ आहेत, संदर्भ वेरियेबलची वैधता तपासली जात नाही. संदर्भ व्हेरिएबल्स हे

मोठ्या प्रमाणावरील डेटा कार्यक्षमतेच्या कारणास्तव तर्क म्हणून करु शकतात प्रत्येक कोड डेटा संदर्भात ठेवत असल्यामुळे विविध कोड क्षेत्रांदरम्यान मोठ्या डेटा सामायिक करण्यासाठी संदर्भांचा देखील वापर केला जातो.

प्रोग्रामिंग भाषा जसे की C ++, Java, Python, Perl, PHP, Ruby, इ. समर्थन संदर्भ.

पॉइंटर आणि संदर्भ यात काय फरक आहे?

पॉइंटर आणि संदर्भ परिभाषित

पॉइंटर:

एक पॉइंटर कंप्यूटिंग मेमरीमध्ये संग्रहित ऑब्जेक्टचा मेमरी एड्रेस आहे संदर्भ: संदर्भ एखाद्या ऑब्जेक्टसाठी एक वैकल्पिक ओळखकर्ता किंवा उपनाव आहे

पॉइंटर आणि संदर्भांची वैशिष्ट्ये

घोषणापत्र

पॉइंटर:

एक निर्देशक * ऑपरेटरने घोषित केला जातो. संदर्भ: संदर्भ ऑपरेटरने घोषित केला आहे.

Dereferencing पॉइंटर:

एक पॉइंटर व्हेरिएबलला * ऑपरेटरला संदर्भ देण्याची आवश्यकता असते.

संदर्भ: संदर्भ व्हेरिएबलला ऑपरेटरला डीरेंफर करण्याची आवश्यकता नाही.

प्रारंभ करताना पॉइंटर:

दर्शकांना शून्य वर प्रारंभ करता येऊ शकतो.अशा वेरिएबल्सला शून्य पॉइंटर म्हणतात. संदर्भ:

संदर्भ निरर्थक करण्यास प्रारंभ केला जाऊ शकत नाही. शून्य संदर्भ म्हणून अशी काही गोष्ट नाही. एक संदर्भ नेहमी ऑब्जेक्ट पहा करणे आवश्यक आहे.

पुनर्मुद्रण पॉइंटर:

विविध ऑब्जेक्ट्सचा संदर्भ देण्यासाठी एक पॉइंटर व्हेरिएबलची पुनर्संरशेल केली जाऊ शकते. संदर्भ:

संदर्भ वेरियेबल पुनर्निदेशित करू शकत नाही. तो ज्या ऑब्जेक्टस आरंभ झाला होता त्यास नेहमी संदर्भ दिला जातो.

उपयोग पॉइंटर:

पॉइंटर व्हेरिएबल्सचा वापर करावा जेव्हा काही संदर्भित करण्याची शक्यता अस्तित्वात नसते किंवा वेगवेगळ्या वेळी वेगवेगळ्या गोष्टींचा उल्लेख करणे आवश्यक असते तेव्हा. संदर्भ:

संदर्भ व्हेरिएबल्सचा वापर केला पाहिजे जेव्हा नेहमी संदर्भ देण्याची एक वस्तु असेल आणि त्या संदर्भ व्हेरिएबलचा वापर त्या ऑब्जेक्टच्या व्यतिरिक्त इतर कशासाठी करणे आवश्यक नसेल.

उपयोगाच्या वापरासाठी पॉइंटर:

पॉईन्टर व्हेरिएबल्सचा वापर एल्गोरिदम आणि डेटा संरचना अंमलबजावणीसाठी केला जाऊ शकतो. संदर्भ: संदर्भ परिवर्तने फंक्शन घटकांमध्ये वापरली जाऊ शकतात आणि परतीच्या प्रकारांमुळे उपयुक्त इंटरफेस परिभाषित होतात.

वापरलेली भाषा:

पॉइंटर: प्रोग्रामिंग भाषा जसे की सी, सी ++, पास्कल आणि बरेच विधानसभा भाषांचे समर्थन पॉइंटर.

संदर्भ: प्रोग्रामिंग भाषा जसे की C ++, Java, Python, Perl, PHP, Ruby, इ. समर्थन संदर्भ.

प्रतिमा सौजन्याने: ही फाइल द्वारे "पॉईंटर्स" वापरकर्ता: SvenTranslation द्वारे करण्यात आली होती. स्वतःचे काम ही व्हेक्टर प्रतिमा इंकस्केपसह तयार करण्यात आली आहे. (सीसी बाय-एसए 3. 0) कॉमन्स द्वारे -