读书人

新手的初学者有关问题

发布时间: 2012-04-12 15:46:35 作者: rapoo

新手的菜鸟问题
各位大虾,小弟遇到关于很经典的那个改变调用函数中某个变量值的问题:
先看一下小弟的程序
#include <stdio.h>

void Exchg2(int *px, int *py)
{
printf( "*px=%d,*py=%d\n ",*px,*py);
int tmp=*px;
*px=*py;
*py=tmp;
printf( "*px=%d,*py=%d\n ",*px,*py);
}

void Exchg3(int *px, int *py)
{
int *tmp=px;
px=py;
py=tmp;
printf( "*px=%d,*py=%d\n ",*px,*py);
}

main()
{
int a=4;
int b=6;
printf( "a=%d,b=%d\n ", a, b);
Exchg3(&a,&b);
printf( "a=%d,b=%d\n ", a, b);
}
Exchg3执行之后驱动函数中的a和b的值没有改变,而Exchg2却可以!Exchg2中是把指针指向的值做了改变,而我在Exchg3中是想使用另外一种方法,那就是把a, b指向的地址做个掉换,从交换改变a, b的值!但是我跟踪了程序的输出,在Exchg3中px和py的地址确实交换了,但是主函数中没有交换,我使用的也是传送地址的方法,为什么不可以呢?请高手指点一下,是不是我对行参和实参的理解有问题呢?或者我对指针概念的理解也有什么问题呢!小弟在这里先谢谢了!

[解决办法]
主函数肯定是不会变的

因为对于函数来讲,接到参数后,进行的具体操作都是对接收参数的拷贝进行操作,而非参数本身,也就是说你主函数里面的a和b的地址作为参数传递到Exchg3中,不管Exchg3如何操作,&a和&b的值是不会改变的。

Exchg2为什么起作用呢,因为Exchg2改变的是参数作为指针指向的内容,参数的拷贝也是一个指针,也指向这个内存区域,所以Exchg2所做的改变是直接生效的

读书人网 >C++

热点推荐