用法上语法有区别,但一般的应用是一样的。
但有一点不同:指针形参可以改指向别的对象,但引用则不行。试看:
void foo(const string* s)
{
std::cout << *s;
new std::string s2;
s = &s2;
std::cin >> *s;
std::cout << *s;
}
这种用法虽然不大常见,一般也没什么实际价值,但是展现了二者的语法区别。(注意引用不能改指别的对象)
补充:选择用指针还是引用有多种看法,也是一种个人习惯。但一般认为因为引用比指针安全,语法也易于理解,在传递const对象时都应该用引用。而当要改动对象时,有的人认为凡是能用引用实现的都用引用(比如标准库就是这样做的),也有人认为用指针可从语法上强调是要对对象进行修改(如Deitel就这样建议),这个你自己选择吧。
指针传递本质上就是值传递,传的是指针变量的值。
而引用传递本质上传的是变量的地址,但操作时,还是当作变量本身来操作。