首页 > 代码库 > 关于swap函数传值的问题
关于swap函数传值的问题
#include <stdio.h> void swap( int * p3, int * p4); int main() { int a = 9; int b = 8; int * p1 = &a; int * p2 = &b; printf ( "%x %x\n" ,p1,p2); swap(p1,p2); printf ( "%d %d\n" ,a,b); printf ( "%d %d\n" ,*p1,*p2); printf ( "%x %x\n" ,p1,p2); return 0; } void swap( int * p3, int * p4) { int * t; t = p3; p3 = p4; p4 = t; } |
初学c的指针类型时,一定都会写这样一个程序,就是利用函数交换两个值。
上面的代码也是很容易想到的,但是这段代码的结果是错误的!!!原因是一个函数是不能有多个返回值的!!
如果有多个值要返回时,就要使用向上通信(即实参为变量的地址)的方法。
在单步调试的过程中,我们也能看到前后两次的地址是没有发生变化的。
如果你用单步调试,你可以看到的是p3和p4的值的确发生了变化,也就是说p3和p4指向的内存的确交换了,但是这种交换却没有影响到p1和p2,p1和p2指向的内存是没有发生变化的。
也就相当于swap函数只是做了p3和p4中存放的地址的值交换。
ps:在对地址(指针)直接进行操作的时候,可以把int * 看作是一个整体int,那么在对p3,p4的变化就相当于是对两个int型变量的变化,被调用函数中int型变量的变化如果不用返回值当然不能带回主函数,但如果使用返回值,却不能带回两个值,所以要使用指针类型。
关于swap函数传值的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。