C ++ में रेफरेंस के लिए पॉइंटर कैसे डालें / कन्वर्ट करें


143

मैं Object *obएक फ़ंक्शन के लिए एक पॉइंटर ( ) कैसे पास कर सकता हूं जो प्रोटोटाइप है void foo(Object &)?


शीर्षक कहता है "कास्ट [सिक] पॉइंटर का संदर्भ" लेकिन सवाल एक पॉइंटर से शुरू होता है और एक संदर्भ की आवश्यकता होती है। यह किस दिशा में है?
एमएसलटर्स

@ इसे परिवर्तित किया जाना चाहिए । मैं इसका संपादन कर रहा हूं। लेकिन मुझे जो भी समाधान मिल रहा था, मैं देख रहा था, इसलिए मैंने कास्ट का
डेव्सवर्ल्ड

जवाबों:


210

इसे इस तरह से कॉल करें:

foo(*ob);

ध्यान दें कि यहां कोई कास्टिंग नहीं चल रही है, जैसा कि आपके प्रश्न शीर्षक में सुझाया गया है। हमने जो कुछ भी किया है वह सूचक को उस वस्तु के लिए संदर्भित करता है जिसे हम फ़ंक्शन में पास करते हैं।


25
@ रिकोबोब यही तो बहुत बार एसओ पर होता है। सरल प्रश्नों के उत्तर जिन्हें आसानी से समझा जा सकता है, अक्सर बहुत सारे वोटों को जोड़ते हैं। मुश्किल सवालों के लंबे और जटिल जवाब अक्सर कुछ अपवित्र मिलते हैं क्योंकि मतदाता आसानी से योग्यता का न्याय नहीं कर सकते हैं। रेप के लिए, मुझे रेप कैप के कारण इस पर कुछ नहीं मिला। ;-) लेकिन मैं दिल से सहमत हूँ। मैं चाहता हूं कि जटिल उत्तर अधिक प्रतिनिधि हों।
डेविड हेफर्नन

@DavidHeffernan हां, यह समस्या प्रतीत होती है - मुझे लगता है कि मेटाटोस को लेने के लिए इसका मुद्दा है - अगर किसी ने इसे पहले ही नहीं उठाया है।
रिकियॉब

4
क्या यह obएक संदर्भ के लिए सूचक की प्रतिलिपि बनाता है , या बस (यदि नहीं डाली जाती है) कन्वर्ट? क्या होगा अगर obथा nullptr?
ड्रू नोक

5
@ आकर्षित यह बस सूचक को dereferences है। कोई कॉपी नहीं। कोई रूपांतरण नहीं। कोई कास्ट नहीं। फ़ंक्शन के संदर्भ में ऑब्जेक्ट को तब पास किया जाता है। यदि बिंदु अशक्त है तो यह एक त्रुटि है।
डेविड हेफर्नन


41
foo(*ob);

आपको इसे कास्ट करने की आवश्यकता नहीं है क्योंकि यह एक ही ऑब्जेक्ट प्रकार है, आपको बस इसे डीरेल करने की आवश्यकता है।


बहुत से जोड़ने का अनुमान लगाना ... आमतौर पर यहां एक अच्छे उत्तर का प्रारूप नहीं है (भले ही यह इस मामले में सही है), शायद इसीलिए आपको एक गिरावट मिली।
किलियांडीएस

5
bhahaaa, मैंने "मुझे लगता है" जोड़ा क्योंकि इससे मुझे कम से कम 30 वर्ण लिखने पड़े। इस तरह से मैं "..........." जोड़ रहा हूँ
रूई गेवरिल

10
@RoeeGavirel मैं आपका पहला अप-वोटर हूं क्योंकि मुझे लगता है कि कठोर होना कठोर है। FWIW आप 30 से अधिक चार सीमाएं प्राप्त कर सकते हैं लेकिन एक HTML टिप्पणी जोड़ सकते हैं <! -----------------------------> जो मैंने अंदर किया मेरे जवाब का पहला संस्करण! आपके उत्तर के लिए मेरा संपादन दिखाता है कि कैसे।
डेविड हेफर्नन

कोड-केवल उत्तर, बिना किसी स्पष्टीकरण के, इन दिनों में डूबे हुए हैं।
कीथ एम

1
@KeithM - यह एक यादृच्छिक टिप्पणी है और -1। इसका उत्तर लगभग 6 साल पहले दिया गया था, यह सवाल भी "क्यों" नहीं पूछा गया, यह केवल "कैसे" के लिए पूछा गया। लेकिन यकीन है, मैं एक स्पष्टीकरण जोड़ देंगे।
रोई गेवियरल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.