#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,值与指向地址都交换了 ,还有指针函数作用域范围,为什么和一般函数作用域总感觉不一样