Ein Unterschied, wie bereits erwähnt, ist, dass Sie keine Nullreferenz übergeben können, aber Sie können einen Nullzeiger übergeben.
Eine andere Sache, erwähnt auch schon, wenn Sie f(a,b)
es nennen Verwirrung sein könnte, wenn der Anrufer nicht weiß, dass f
möglicherweise den Wert für b
jedoch noch ein weiteres Problem, das eher subtil ändern könnte, aber I still ran into it, ist die Semantik von Referenzen.
Zeiger werden nach Wert übergeben, Referenzen jedoch nicht.
Das bedeutet, wenn Sie einen Parameter per Zeiger übergeben, können Sie den Zeiger ändern und auf etwas anderes zeigen.
Bedenken Sie:
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
}
Aber, wenn sie durch Bezugnahme vorbei, können Sie nicht ändern Sie den Verweis auf einen anderen Wert zu verweisen. Sobald die Referenz festgelegt ist, kann sie nicht geändert werden.
Es gibt eine Menge von Artikeln und Themen zu diesem Thema http://www.google.ru/search?q=pointer+vs+ Referenz – abatishchev