赞
踩
这里需要注意定义指针变量时必须带*,给指针变量赋值的时候如果赋值是地址的话不能带*
在访问指针中数据的时候,对于定义的指针如果带*号表示访问的是该指针中存储的地址中存放的数据,而直接访问该指针(p)则返回的是该指针中存放的地址。
接下来有三个函数都可以实现swap的交换
法一:使用地址来接收数据:
运行后可以发现这个完全可以成功交换两个数据,也就是在传递的时候虽然传的是a,b的数据,但是我在接收的时候直接获取的是这个数据存放的地址。同时也可以发现a的地址和在swap3中接收的a的地址相同。
void swap3(int &a,int &b){
cout<<"这里是直接传的数据然后用地址接收"<<endl;
cout<<a<<' '<<&a<<endl;
int c=a;
a=b;b=c;
}
//而在调用该函数的时候直接使用swap3(a,b);
swap3(a,b);
这个方法相当于是直接获取a和b的地址,直接在地址上进行数据的操作,数据也就能同步在主函数中。也就不会像普通的函数调用它会生成一个新的地址来存储主函数送过来的参数,并在新生成的地址上对数据进行操作。
法二:使用指针来进行接收数据:
void swap2(int *a,int *b){
int c=*a;
*a=*b;
*b=c;
}
//函数调用
swap2(&c,&d);
以上方法相当于是将c和d的地址传给swap2函数,在swap函数中定义两个存放地址的指针a和b,并将主函数中传来的地址存放在a和b中,这里一定要主要a和b中存放的是c,d的地址,而*a才是c对应的值。也就是将它的数据换成另一个数。
法三:
void swap(int *a,int *p){
int *c=p;
p=a;
a=c;
}
这个方法似乎有点不太靠谱,刚开始使用调用函数
swap(&a,&b);
结果交换失败,然后本来是代码写错了,结果发现这样写居然可以达到交换两个数的目的,但不知道为什么在swap里面写的输出函数就会打印不出来。
swap(a,b);
对计算机内部数据的存储了解不太多,如果有大佬知道指点一下为什么就感激不尽啦。
这个打印不出来是指我在swap里面随便加一个打印结果,但两条cout语句都输出不出来。但使用swap(&a,&b)调用又能输出来,却又实现不了数据的交换。
void swap(int *a,int *p){
cout<<"这里是直接传的数据然后用地址接收"<<endl;
cout<<"这是第一个语句测试:"<<a<<' '<<*a<<endl;
int *c=p; //也就是将p中存放的b的地址给c
p=a;
a=c;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。