सी ++ रेफरेन्स बनाम पॉइंटर के बीच अंतर
हालांकि पॉइंटर के लिए सी ++ रेफरेन्स समान प्रतीत होता है, सी ++ रेफरेन्स बनाम पॉइंटर दोनों के बीच एक महत्वपूर्ण अंतर है। एक रेफरेन्स चर को मौजूदा चर के लिए एक और नाम के रूप में कहा जा सकता है। एक बार यह चर प्रारंभ हो जाने के बाद परिवर्तनीय नाम का उपयोग किसी अन्य चर के रेफरेन्स में किया जा सकता है। दूसरी तरफ पॉइंटर वेरिएबल्स हैं जो एक चर के पते को स्टोर करते हैं। किसी भी चर की तरह, इन्हें पहले घोषित किया जाता है और फिर उनमें कोई भी चर का पता संग्रहीत किया जा सकता है। आइए नीचे दिए गए विवरण में सी ++ रेफरेन्स बनाम पॉइंटर के बीच मतभेदों को देखें।
सी ++ रेफरेन्स बनाम पॉइंटर (इन्फोग्राफिक्स) के बीच हेड टू हेड तुलना
सी ++ रेफरेन्स बनाम पॉइंटर के बीच शीर्ष 7 अंतर नीचे दिया गया है
सी ++ रेफरेन्स बनाम पॉइंटर के बीच महत्वपूर्ण अंतर
सी ++ रेफरेन्स बनाम पॉइंटर दोनों बाजार में लोकप्रिय विकल्प हैं; चलो सी ++ रेफरेन्स बनाम पॉइंटर के बीच कुछ प्रमुख अंतर पर चर्चा करें:
पॉइंटर के लिए सी ++ रेफरेन्स बीच मुख्य अंतर यह है कि कोई अन्य चर का जिक्र कर रहा है जबकि बाद वाला एक चर के पते को संग्रहीत कर रहा है। रेफरेन्स मूल परिवर्तक में कोई परिवर्तन नहीं करते हैं, जबकि पॉइंटर बदल जाता है तो यह मूल चर को प्रभावित करता है। एक रेफरेन्स घोषित होने पर प्रारंभ किया जाना चाहिए, जब इसे घोषित करने के बाद पॉइंटर को प्रारंभ करना आवश्यक नहीं है। पॉइंटर की एक सरणी बनाई जा सकती है जबकि रेफरेन्स की एक सरणी नहीं बनाई जा सकती है। एक शून्य मान को रेफरेन्स में असाइन नहीं किया जा सकता है लेकिन इसे एक पॉइंटर को असाइन किया जा सकता है।
सी ++ रेफरेन्स बनाम पॉइंटर तुलना तालिका
सी ++ रेफरेन्स बनाम पॉइंटर के बीच प्राथमिक तुलना नीचे चर्चा की गई है:
सी ++ रेफरेन्स बनाम पॉइंटर के बीच तुलना का आधार | सी ++ रेफरेन्स | पॉइंटर |
चर | एक रेफरेन्स को मौजूदा चर के उपनाम के रूप में कहा जा सकता है। इस चर का मुख्य उपयोग पैरामीटर के रूप में काम कर रहा है जो पास-बाय-रेफरेंस के रूप में काम करता है। यह एक समारोह में पारित किया जाता है।जिस कार्य को पारित किया गया है वह उस मूल्य के बजाय मूल चर पर काम करता है जो प्रतिलिपि में प्रतिलिपि में प्रतिलिपि बनाता है।फ़ंक्शन के अंदर किए गए परिवर्तन भी प्रतिबिंबित होंगे। | पॉइंटर चर वेरिएबल हैं जो पता संग्रह करते हैं। सामान्य चर के विपरीत जो हमारे पास int, दोहरा और चार की तरह है, यह स्मृति पते संग्रहीत करता है। प्रोग्रामिंग को आसान बनाने के लिए इस चर के लिए आवश्यकता उत्पन्न होती है।यह एक चर है जो किसी विशेष प्रकार के मान को स्टोर कर सकता है। |
घोषणा | एक चर ++ रेफरेन्स चर की घोषणा एक चर से पहले एक ‘और’ प्रतीक जोड़कर किया जाता है। जब इसे अभिव्यक्ति के साथ प्रयोग किया जाता है तो यह दर्शाता है कि यह ऑपरेटर के पते के रूप में काम कर रहा है। इसका उपयोग किसी मौजूदा चर को एक और नाम प्रदान करने के लिए किया जाता है।
वाक्य – विन्यास: type &newName = existingName; // or type& newName = existingName; // or type & newName = existingName; For eg: /* Test reference declaration and initialization */ #include <iostream> using namespace std;
int main() { string name = “Priya”; // Declare a string variable called name string & refName = name; // Declare a reference (alias) to the variable name // Both refName and name refer to the same value of “Priya”
cout << name << endl; // It prints value of the variable “Priya”
cout << refName << endl; // It prints value of reference “Priya”
Now change the value of Name refName = “Karishma”; // Re-assign a new value to refName cout << refName << endl; cout << name << endl; // Value of number also changes “Karishma”
name = “Snehal”; // Re-assign a new value to name cout << namer << endl; cout << refName << endl; // Value of refName also changes “Snehal” } यह दर्शाता है कि रेफरेन्स चर के मान मूल में और चर की प्रतिलिपि में बदला जा सकता है। |
कार्यक्रम में कहीं भी पॉइंटर का उपयोग करने से पहले इसे अग्रिम में घोषित किया जाना चाहिए। एक पॉइंटर घोषित करने के लिए और सिस्टम को यह बताने दें कि यह एक पॉइंटर है, एक चर को ‘*’ द्वारा उपसर्ग किया जाता है। एक पॉइंटर डेटा प्रकार के साथ होता है जो एक int या डबल, आदि हो सकता है।
वाक्य – विन्यास: type *pntr; // Declare a pointer variable called pntr as a pointer of type // or type* pntr; // or type * pntr; For eg: int * newPtr; // Declare a pointer variable called newPtr pointing to an int (an int pointer) This pointer will hold the address. That address holds an int value. double * newdPtr; // Declare a double pointer * इंगित करता है कि एक पॉइंटर घोषित किया जा रहा है और ऑपरेटर के रूप में कार्य नहीं करता है। |
रीअसाइनमेंट | एक रेफरेन्स चर पुन: असाइन नहीं किया जा सकता है।
उदाहरण: int x = 5; int y = 6; int &r = x;
|
एक पॉइंटर को फिर से सौंप दिया जा सकता है और यह संपत्ति काम में आती है जब कोई डेवलपर लिंक संरचनाओं, पेड़ इत्यादि जैसे डेटा संरचनाओं को कार्यान्वित कर रहा है।
उदाहरण: int x = 5; int y = 6; int *p; p = &x; p = &y; |
मेमोरी पता | एक रेफरेन्स चर मूल वैरिएबल के समान पता साझा करता है। इन रेफरेन्स को विभिन्न कार्यों में पारित किया जा सकता है, इसे विभिन्न वर्गों में संग्रहीत किया जा सकता है। एक रेफरेन्स तब तक एक नए चर को इंगित नहीं करता जब तक पुराना हटाया जाता है या दायरे से बाहर नहीं जाता है। | एक पॉइंटर का अपना मेमोरी एड्रेस होता है और इसे स्टैक पर स्टोर करता है। एक पॉइंटर एक स्वतंत्र चर है और नए मान खुद को सौंपा जा सकता है। |
शून्य मूल्य | एक रेफरेन्स में एक शून्य मान असाइन नहीं किया जा सकता है। | एक पॉइंटर के पास एक शून्य मान सीधे सौंपा जा सकता है। |
तर्क | एक रेफरेन्स चर को मूल्य से बाईपास रेफरेन्स किया जा सकता है। यहां तर्कों को मूल्यों के आधार पर पारित किया जाता है। एक क्लोन बनाया जाता है और इसका उपयोग करके समारोह में भेजा जाता है। प्रतिलिपि में किए गए परिवर्तनों का मूल चर पर कोई प्रभाव नहीं पड़ता है। | जब हम मूल प्रतिलिपि बदलना चाहते हैं तो यह ऑब्जेक्ट के पॉइंटर को फ़ंक्शन में पास करके किया जा सकता है। इसे रेफरेन्स द्वारा पास के रूप में जाना जाता है। |
कब इस्तेमाल करें | रेफरेन्स अप्रत्यक्ष रूप से एक चर का उपयोग कर रहे हैं। निम्नलिखित उदाहरण पर विचार करें:
{ Sunday, Monday, … }; If we define a variable day x; यदि हम एक चर परिभाषित करते हैं दिन एक्स; और हम कथन को ऑपरेटर अधिभारित करना चाहते हैं तो हम नीचे लिख सकते हैं: दिन और ऑपरेटर ++ (दिन और डी) { d = (day)(d + 1); return d; } संक्षेप में, यह फ़ंक्शन पैरामीटर और रेफरेन्स प्रकारों में उपयोग किया जा सकता है। |
पॉइंटर का उपयोग किसी भी पूर्व घोषणा के बिना है।
दिन * ऑपरेटर ++ (दिन * डी);
इसका उपयोग डेटा संरचनाओं और पॉइंटर अंकगणितीय परिचालनों को लागू करने के लिए किया जा सकता है। |
निष्कर्ष – सी ++ रेफरेन्स बनाम पॉइंटर
पॉइंटर बनाम रेफरेन्स पर काम करना मुश्किल होता है लेकिन वे कार्यक्रम की दक्षता में काफी हद तक सुधार करते हैं। वे दोनों पॉइंटर बनाम रेफरेन्स का अपना स्वयं का उपयोग करते हैं और अपने स्वयं के उद्देश्यों की पूर्ति करते हैं। जब आप रिटर्न प्रकार के साथ फ़ंक्शन और पैरामीटर का उपयोग करना चाहते हैं तो रेफरेन्स के दौरान आप डेटा संरचनाओं और एल्गोरिदम को लागू करना चाहते हैं, तो आप पॉइंटर का उपयोग कर सकते हैं ।
अनुशंसित आलेख
यह सी ++ पॉइंटर्स बनाम रेफरेन्स के बीच शीर्ष अंतर के लिए एक मार्गदर्शक रहा है। यहां हम इन्फोग्राफिक्स और तुलना तालिका के साथ सी ++ पॉइंटर्स बनाम रेफरेन्स कुंजी अंतरों पर भी चर्चा करते हैं। आप और जानने के लिए निम्नलिखित लेखों पर भी एक नज़र डाल सकते हैं –
- पायथन बनाम सी ++ मतभेद
- सी बनाम सी ++ प्रदर्शन – सर्वश्रेष्ठ मतभेद
- मोंगो डीबी बनाम कैसंद्रा
- मोबक्स बनाम रेडक्स