Pass by pointer & Pass by reference
Possible Duplicate:
What are the differences between pointer variable and reference variable in C++?
Are there benefits of passing by pointer over passing by reference in C++?
在这两种情况下,我都取得了成果。那么什么时候一个比另一个更受欢迎呢?我们用一个比另一个的原因是什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #include <iostream> using namespace std; void swap(int* x, int* y) { int z = *x; *x=*y; *y=z; } void swap(int& x, int& y) { int z = x; x=y; y=z; } int main() { int a = 45; int b = 35; cout<<"Before Swap "; cout<<"a="<<a<<" b="<<b<<" "; swap(&a,&b); cout<<"After Swap with pass by pointer "; cout<<"a="<<a<<" b="<<b<<" "; swap(a,b); cout<<"After Swap with pass by reference "; cout<<"a="<<a<<" b="<<b<<" "; } |
产量
1 2 3 4 5 6 7 | Before Swap a=45 b=35 After Swap with pass by pointer a=35 b=45 After Swap with pass by reference a=45 b=35 |
引用的语义如下:
与其他答案一样,下面的C++ FAQ是一行答案:可能的引用,需要时的指针。
相对于指针的一个优势是,您需要显式强制转换才能传递空值。不过,这仍然是可能的。在我测试过的编译器中,没有一个会发出以下警告:
1 2 3 4 5 6 7 8 9 | int* p() { return 0; } void x(int& y) { y = 1; } int main() { x(*p()); } |
实际上,大多数编译器为两个函数调用发出相同的代码,因为引用通常是使用指针实现的。
遵循此逻辑,当函数体中使用(非常量)引用类型的参数时,生成的代码将仅对参数的地址进行静默操作,并将其取消引用。此外,当遇到对此类函数的调用时,编译器将生成传递参数地址的代码,而不是复制参数值。
基本上,引用和指针与实现的观点没有太大的不同,主要(也是非常重要)的区别在于哲学:引用是对象本身,只是具有不同的名称。
与指针相比,引用具有更多的优势(例如,它们不能是
这里有一篇关于这个问题的好文章-"尽可能使用引用,必要时使用指针。"
pass-by指针是在C语言中传递"by-reference"的唯一方法,因此您仍然可以看到它使用了很多。
空指针是表示参数未使用或无效的简便约定,因此在这种情况下使用指针。
一旦设置了引用,就不能更新它们,所以如果需要重新分配它,请使用指针。
在没有充分理由不推荐的情况下,最好是推荐信。如果可以的话,把它改成1〔3〕。
只有当你必须引用
请参阅此常见问题解答:http://www. PARASIFIF.COM/C++-FAQLIT/Realth.html