蒲公英花开 发表于 2014-4-17 18:28:28

为什么a,b的值没有调换...

#include <iostream>
void swap(int *p1,int*p2)
{
        int *temp;
        temp=p1;
        p1=p2;
        p2=temp;
        std::cout<<"p1="<<*p1<<"\n"<<"p2="<<*p2<<"\n";
}
void main()
{
        int a=1,b=2;
        int *point1,*point2;
        point1=&a;
        point2=&b;
        if(a<b)
                swap( point1,point2);
        std::cout<<"a="<<a<<"\n"<<"b="<<b<<"\n";
}

奔跑的鸭蛋 发表于 2014-4-17 19:28:39

举个例子,比如&a=0x01,&b=0x02,swap函数里,p1,p2接受到地址,&p1=0x01,&p2=0x02,此时交换地址,&p1=0x02,&p2=0x01,交换的只是p1,p2的地址,a,b的地址并没有交换。所以输出*p1,*p2时,地址里的数据交换了,而输出a,b是,数据没有交换~可能就是这样吧~~

奔跑的鸭蛋 发表于 2014-4-17 19:36:27

奔跑的鸭蛋 发表于 2014-4-17 19:28 static/image/common/back.gif
举个例子,比如&a=0x01,&b=0x02,swap函数里,p1,p2接受到地址,&p1=0x01,&p2=0x02,此时交换地址,&p1=0x02, ...

修改一下,说错了,输出*p1,*p2,是地址交换了,地址里的数据没有交换~0x01里的值仍是1,0x02的值仍是2~~不好意思~~

蒲公英花开 发表于 2014-4-18 06:55:01

原来如此...弄明白了...谢谢了...啊嘞嘎都

Missing_Angle_o 发表于 2014-4-18 20:54:37

你在逗我?
明明是在交换指针。
你应该这么写
int t;
t = *P1;
*p1 = *p2;
*p2 = t;
页: [1]
查看完整版本: 为什么a,b的值没有调换...