एक अंतर, जैसा कि पहले उल्लेख किया गया है, क्या आप एक शून्य संदर्भ पास नहीं कर सकते हैं, लेकिन आप एक शून्य सूचक पास कर सकते हैं।
एक और बात, यह भी पहले से ही उल्लेख किया है, जब आप कॉल f(a,b)
भ्रम हो सकता है अगर फोन करने वाले को पता नहीं है कि f
संभावित b
के लिए मूल्य बदल सकता है हालांकि, अभी तक एक और मुद्दा है, जो बल्कि सूक्ष्म है, लेकिन I still ran into it, संदर्भों का अर्थशास्त्र है।
पॉइंटर्स मूल्य से पारित होते हैं, लेकिन संदर्भ नहीं हैं।
जिसका अर्थ है, यदि आप पॉइंटर द्वारा पैरामीटर पास करते हैं, तो आप पॉइंटर बदल सकते हैं और इसे किसी अन्य चीज़ पर इंगित कर सकते हैं।
इस पर विचार करें:
void f1_ptr(type * a)
{
a = new type(); //no change to passed parameters, you're changing the pointer which was passed by value
}
void f2_ptr(type * a)
{
*a = some_other_value; //now you're changing the value of the parameter that was passed
//or, if type is a class or struct:
a->some_method_that_modifies_object(); //again, changing the parameter that was passed
}
लेकिन, जब संदर्भ द्वारा पारित करने के लिए, आप संदर्भ एक और मूल्य का उल्लेख करने नहीं बदल सकते। एक बार संदर्भ सेट हो जाने पर, इसे बदला नहीं जा सकता है।
void f3_ref(type& a)
{
a = type(); //the referred variable has also changed
}
//....
type obj = type(params);
f3_ref(obj); //obj now changed
f1_ptr(&obj); //obj doesn't change
f2_ptr(&obj); //obj now changed
वहाँ लेख और इस मुद्दे के बारे विषयों की एक बहुत हैं http://www.google.ru/search?q=pointer+vs+ संदर्भ – abatishchev