qq_26337701
qq_26337701
2016-12-24 07:19
采纳率: 100%
浏览 1.1k
已采纳

指针函数参数传递问题

#include

using namespace std;

void Change1(int *pa,int *pb);//声明参数是指针的函数;

void Change2(int *pa,int *pb);

void Change3Test(int a,int b);

int main(int argc, char const *argv[])
{

int a(10),b(20);


 cout<<"在交换前:a="<<a<<"\t b="<<b<<endl;


Change2(&a,&b);  //调用函数指针传值:
 cout<<"在交换后2:a="<<a<<"\t b="<<b<<endl;

 Change1(&a,&b);  //调用函数指针传值:

cout<<"在交换后3:a="<<a<<"\t b="<<b<<endl;



return 0;

}

void Change1(int *pa,int *pb) //函数定义
{

 cout<<" Change pa:="<<pa<<"\t *pa=="<<*pa<<endl;
 cout<<" Change pd:="<<pb<<"\t *pb=="<<*pb<<endl;

int temp=*pa; //将指针变量保存在变量temp中;

  *pa=*pb;      //内容进行交换
  *pb=temp;
 cout<<" Change pa:="<<pa<<"\t *pa=="<<*pa<<endl;
 cout<<" Change pd:="<<pb<<"\t *pb=="<<*pb<<endl;

}

void Change2(int *pa,int *pb)
{

 cout<<" Change2 pa:="<<pa<<"\t *pa=="<<*pa<<endl;
 cout<<" Change2 pd:="<<pb<<"\t *pb=="<<*pb<<endl;

int *temp=pa; //将指针地址保存在temp指针中;

   pa=pb;      //指针指向交换----
   pb=temp;

cout<<" Change2 pa:="<<pa<<"\t *pa=="<<*pa<<endl;
cout<<" Change2 pd:="<<pb<<"\t *pb=="<<*pb<<endl;
}

void Change3Test(int a,int b)

{
int temp=a;
a=b;
b=temp;

}


运行结果,
在交换前:a=10 b=20
Change2 pa:=0xffffcbcc *pa==10
Change2 pd:=0xffffcbc8 *pb==20
Change2 pa:=0xffffcbc8 *pa==20
Change2 pd:=0xffffcbcc *pb==10
在交换后2:a=10 b=20
Change pa:=0xffffcbcc *pa==10
Change pd:=0xffffcbc8 *pb==20
Change pa:=0xffffcbcc *pa==20
Change pd:=0xffffcbc8 *pb==10

在交换后3:a=20 b=10

为什么在main函数输出中,在调用change2打印的值没有变动,而change1在调用后发生了改变?在调用函数中,打印值,发现已经发生变动,change1函数中,赋值发生了交换,change2,值与指向地址都交换了 ,还有指针函数作用域范围,为什么和一般函数作用域总感觉不一样

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • qq_26337701
    qq_26337701 2016-12-24 09:52
    已采纳

    我明白了,change2局部变量的指针在函数调用结束其内存空间就释放了,所以还是原来的指针。change1,里面的值发生交换,指针未发生交互

    点赞 评论
  • u014602197
    _Seven_Y 2016-12-24 08:22

    因为change2中,你只改变了指针变量自身的值,但是没有改变到指针变量所指向的内存空间上的值,所以即使你在change2上的输出貌似做出了交换,但是其实原本内存空间上的值没有做出变化

    点赞 评论
  • qq_26337701
    qq_26337701 2016-12-24 08:55

    谢谢,为什么原本的空间值没有变?从打印的结果来看,就像你描述的那样

    点赞 评论

相关推荐