【发布时间】:2020-07-18 07:28:41
【问题描述】:
当我们以这种方式修改交换函数时会发生什么?我知道它不起作用,但到底发生了什么?我不明白我实际上做了什么?
#include <stdio.h>
void swap(int*, int*);
int main(){
int x=5,y=10;
swap(&x, &y);
printf("x:%d,y:%d\n",x,y);
return 0;
}
void swap(int *x, int *y){
int* temp;
temp=x;
x=y;
y=temp;
}
【问题讨论】:
-
这里,您是在本地交换指针本身,而不是它们指向的内容,因此没有外部可观察到的效果。
-
如果你想让它工作,你需要通过引用传递指针 (
int*&);它对于复制成本高昂的东西很有用。 -
@nick 是的,这在特定情况下会很有用,但在这里不可能,因为
x和y的类型是int,而不是int*。如果指针不是指针对象,则不能交换指针的值。 -
@RobertSsupportsMonicaCellio 当然,这只是一般技术的一个旁注,即它可以在这个特定设置下工作。我会争辩说,这对整数无论如何都没有意义,因为复制 int 的成本与复制指针的成本相同。
-
几天前的惊人相似问题:stackoverflow.com/questions/61013632/…
标签: c++ c pointers memory swap