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

指针函数参数传递问题

#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 2016-12-24 09:52
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!