首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手的初学者有关问题

2012-04-12 
新手的菜鸟问题各位大虾,小弟遇到关于很经典的那个改变调用函数中某个变量值的问题:先看一下小弟的程序#in

新手的菜鸟问题
各位大虾,小弟遇到关于很经典的那个改变调用函数中某个变量值的问题:
先看一下小弟的程序
#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所做的改变是直接生效的

热点排行