看下面: void Swap(int *p1, int *p2) { int *p; p = p1; p1 = p2; p2 = p; } 指针的用法错在哪?

有没有人在啊,想请说下,看下面: void Swap(int *p1, int *p2) { int *p; p = p1; p1 = p2; p2 = p; } 指针的用法错在哪?
最新回答
雨后初见彩虹

2024-09-20 01:39:34

定义里面的所有指针前加个*;
给你分析下,说到底指针也是个变量吧,既然是变量就逃不过一个宿命,就是直接传进函数的时候,在函数里调用的只是变量的一个副本。所以看程序,参数列表中的(int *p1, int *p2),p1,p2其实都是副本,在执行语句p = p1; p1 = p2; p2 = p; 后 p1,p2的指向地址是交换了,但是p1,p2是你真正想交换的指针吗?,回到main中那两个指针还是没变。至于为什么,你能写这个程序说明这点你是掌握了的。
那么为什么加*就可以了,这里的p1,p2不管是本体还是副本,都是指向你想交换的那个变量地址的,只要是指向了那个地址,就可以用*p1= 来进行赋值。
希望对你有帮助啊
傲娇浪女

2024-09-20 22:56:16

swap()函数的目的是作用在值的交换
参数p1,p2都是形参,这里的形参是数据的地址
假如实参是f1,f2,调用函数swap(f1,f2)
在此函数中,p=p1,就是将f1所对应变量的地址赋给p,然后交换,虽然地址交换了,但对f1,f2并没有影响,因为你传的只是一个数值,是形参的传递。
所以想要改变外部的值,只能是利用类似*p的这种形式,让指定地址所对应的值发生变化,从而达到改变外部变量的目的;
本性难移

2024-09-20 08:51:34

定义了 int *p
但是他指向什么没有定义
可能导致指向莫名的空间
你拿他当中间变量
如果是没用的信息被覆盖没什么大影响
否则可能导致系统崩溃
报错 等等
恭候春夏的轮替

2024-09-20 06:10:43

你要交换的是指针指向的内容,而不是指针地址。
你这样做其实是交换了两个指针的地址。
屋顶上的小猫咪

2024-09-20 20:54:19

p1,p2在函数中值改变影响不了外部
应该这样写
void Swap(int *p1, int *p2) { int p = *p1; *p1 = *p2; *p2 = p; }