关于交换a,b两数值

今天我写函数在处理参数的时候变量和指针完全混乱了,各种结构体参数以指针以变量的形式各种传,然后彻底凌乱了。最后改到都没有办法编译了,然后就到处找关于参数传递的地址传递,然后发现一个很简单的交换a,b用地址交换我都不会,我的原程序是

#include<iostream>

using namespace std;

void hanshu(int *a,int *b)

{

       int *t;

       t=a;

      a=b;

      b=t;

}

int main()

{

      int a=7,b=4;

      hanshu(&a,&b);

      cout<<a<<" "<<b<<endl;

}

我原本以为传递地址之后,交换两个地址就可以使得a,b的值交换,后来发现根本达不到想要的结果。然后百度了一下,发现其实是个很蠢的错误,其实函数a,b两个指针也是形参地址,就算交换了也没有在实参上产生任何作用。然后才有了下面改进后的代码,但是也只是做到了交换指针内的地址。

#include<iostream>

using namespace std;
void hanshu(int **a,int **b)   //交换指针指向的地址,int型的指向指针的指针,新的a,b指针
{
cout<<a<<" "<<*a<<" "<<b<<" "<<*b<<endl;//a,b指针中存放变量a,b的值,*a,*b为指针p,q的地址;
cout<<a<<" "<<*a<<" "<<**a<<" "<<&a<<" "<<&*a<<" "<<&**a<<endl;
int *t;         //通过交换a,b指向的指向a,b的指针内的地址,改变原指针指向的值,原a,b内的值没有改变
t=*a;
*a=*b;
*b=t;
cout<<a<<" "<<*a<<" "<<b<<" "<<*b<<endl;
}
int main ()
{
int a=7,b=4;
cout<<&a<<" "<<&b<<endl;
int *p=&a,*q=&b;
cout<<p<<" "<<&p<<" "<<*p<<" "<<q<<" "<<&q<<" "<<*q<<endl;
hanshu(&p,&q);
cout<<*p<<" "<<*q<<endl;
cout<<a<<" "<<b<<endl;
//;cout<<*p<<" "<<*q<<endl;
return 0;

}


我调试的时候有过一段这样的代码

int *t;

t=&a;

&a=&b;

&b=t;

就是想直接改地址,后来编译的时候提示must have l-value,就是是说赋值的时候等号左边必须要有左值,左边的值必须有内存空间或者是是一个可更改的变量,还不能是不可以更改的指针地址。好像很高端呀,其实只是&a根本就只是一个地址相当于一个常量,怎么可以做赋值运算,就像不能写3=4一样,我这是脑抽抽了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值