关于swap函数传值的问题
Posted 学习丶笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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函数传值的问题的主要内容,如果未能解决你的问题,请参考以下文章