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

来源:学生作业帮助网 编辑:作业帮 时间:2024/10/04 17:52:47
看下面:void Swap(int *p1,int *p2) { int *p; p = p1; p1 = p2; p2 = p; } 指针的用法错在哪?
xSn@Y6|DV[ )ä e mRd,x_n{=gUs]N5Lvw /ȳyI$Դ"#c 2pD>VӣF; /f]t$u&\1efpb1۔0eDyaחlQa&S5x-I%묐V'-h(= O7Xݗ#L:th W=kLnă>>k"D%e\5?}Ks$BSt2UJ3, |r}:%3k|k_ qC 5 4awUW=? Kb;\@}@(:*]Qwt1F\G~:j5p̈}tyEtcV’nԘ5F]86,ơށ  <^ cȾMz(0E="f4>x=.F(>vL`WE .MQŜ~;[c

看下面: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; } 指针的用法错在哪?

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