2009-10-30 13 views
6

पास-बाय-रेफरेंस और सी पॉइंटर नोटेशन का उपयोग करने के बीच क्या अंतर है?पास-दर-संदर्भ और * के बीच अंतर?

void some_function(some_type& param)

और

void some_function(some_type *param)

धन्यवाद

+4

मुझे संदेह है कि कोई भी 1000 ट्यूटोरियल और स्पष्टीकरणों में से एक को पुन: उत्पन्न करने जा रहा है जो पहले से मौजूद है। एक नज़र डालें: http://www.parashift.com/c++-faq-lite/references.html – pmr

+0

संभावित डुप्ले: http://stackoverflow.com/questions/57483/difference-between-pointer-variable-and -reference-variable-in-c – Jherico

+0

डुप्लिकेट: http://stackoverflow.com/questions/1322517/passing-a-modifiable-parameter-to-c- कार्यक्षमता – SadSido

उत्तर

7

जब आप एक सबराउटिन कॉल में चर के लिए पॉइंटर पास करते हैं, तो उस चर का पता subroutine को पास किया जाता है। Subroutine में चर का उपयोग करने के लिए, सूचक को अव्यवस्थित होना चाहिए।

जब आप किसी चर के संदर्भ को पास करते हैं, तो कंपाइलर चर के पते को प्राप्त करने का ख्याल रखता है जब चर subroutine को पास किया जाता है और subroutine में चर को संदर्भित करता है।

+0

अद्भुत! यह बहुत मदद करता है! –

+0

यह निश्चित रूप से एक वाक्य रचनात्मक चीनी नहीं है। मतभेद हैं, जैसा कि आप अन्य उत्तरों से देख सकते हैं। – SadSido

+0

संदर्भ के रूप में दोनों के बीच कई सूक्ष्म अंतर हैं उपनाम है। निचे देखो। –

6
  • आप एक शून्य संदर्भ नहीं मिल सकता है: इस अकेले आप सुरक्षा के बहुत सारे देता है
  • आप अपने संदर्भ इलाज कर सकते हैं जैसे कि यह एक वस्तु थी: आप इसे अस्वीकार कर सकते हैं या जो कुछ भी आपको चाहिए।

मूल रूप से आप एक सुरक्षित सूचक को संभालते हैं जैसे कि यह आपकी स्वयं की वस्तु थी।

+6

आप आसानी से एक शून्य सूचक को dereferencing द्वारा एक शून्य संदर्भ प्राप्त कर सकते हैं। – Jherico

+0

रक्षात्मक या पागलपन होने वाली चीजें हैं ?? –

+0

यह आमतौर पर एक गलती का अधिक होता है: आपका संदर्भ उस ऑब्जेक्ट को इंगित करता है जिसे नष्ट कर दिया गया है या कभी अस्तित्व में नहीं है। कुख्यात उदाहरण: 'std :: वेक्टर myVec; myVec.front(); '... आप कैसे पछतावा करते हैं, कि 'std :: vector :: front' out_of_range नहीं फेंकता है! –

संबंधित मुद्दे