Diff Between Call By Reference And Call By Pointer
本问题已经有最佳答案,请猛点这里访问。
任何人都能告诉我指针调用和引用调用之间的确切区别吗?事实上,这两起案件都发生了什么?
如:
参考呼叫:
1 2 3 4 5 6 7 8 9 10 11 | void swap(int &x, int &y) { int temp; temp = x; /* save the value at address x */ x = y; /* put y into x */ y = temp; /* put x into y */ return; } swap(a, b); |
指针调用:
1 2 3 4 5 6 7 8 9 10 11 | void swap(int *x, int *y) { int temp; temp = *x; /* save the value at address x */ *x = *y; /* put y into x */ *y = temp; /* put x into y */ return; } swap(&a, &b); |
这两种情况都是一样的。
但是,小的区别是,引用永远不会为空(在函数内部,您可以确定它们引用的是有效变量)。另一方面,指针可能是空的,或者指向内存中的无效位置,从而导致AV。
从语义上讲,这些调用具有相同的结果;在hood下,使用指针实现引用。
使用引用和指针之间的重要区别在于,使用引用时,挂在自己身上的绳子要少得多。引用总是指向"某物",其中指针可以指向任何东西。例如,完全可以这样做
1 2 3 4 5 6 7 8 9 10 | void swap(int *x, int *y) { int temp; temp = *x; /* save the value at address x */ ++x; *x = *y; /* put y into x */ *y = temp; /* put x into y */ return; } |
现在,这个代码可以做任何事情,崩溃,运行,让猴子飞出你的noes,任何事情。
如果有疑问,最好参考文献。它们是指针上更高、更安全的抽象级别。
我不知道为什么这被标记为Jave,因为没有指针。但是,对于这个概念,如果您正在处理value属性,那么您可以同时使用指针和引用。例如i=4或*i=4。使用指针的优点是可以操纵地址本身。有时您需要修改地址(指向其他内容…)这是指指针不同以供引用;指针允许您直接处理地址,引用不会
你的代码是C++代码。在Java中没有指针。两个例子都做相同的事情,功能上没有区别。
在您的示例中,没有区别。
C++中的引用是用指针实现的。
编辑:对于相信引用不能为空的用户:
1 2 3 4 5 6 7 8 9 | int calc(int &arg) { return arg; } int test(int *arg) { return calc(*arg); } |
猜猜看,