这个函数明明是传址,为什么并未改变xy的值呢?

img


请问这个函数明明是传址,为什么并未改变xy的值呢?是因为函数内的指针并未解引用,只是改变的函数体内指针的指向对象吗?

首先你要明白形参和实参。在函数内部定的x与y是属于形参。你将两个形参的数据进行调换,当你跳出函数的时候,这两个形参销毁。而main函数里面的实参x和y所指向的地址不会变。
但是如果你在函数内部是进行改变指针所指向的数据。那么虽然形参xy销毁了,但是实参xy所指向的数据被改变了。
这个就好比,我有两个相同类型指针a和b。他们指向的位置一模一样,当我改变指针a所指向的数据。然后指针b所指向的数据也会改变,因为ab指向同一个数据。这里也是类似原理

t=*x;
*x=*y;
*y=t;
你必须交换x和y指向的地址内的值,不要交换x和y的地址
因为x和y只是形参,你改它的地址不改变实参的地址