还是两个数的交换问题

#include<iostream.h>
void main()
{
    int *a,*b;
    int x,y;
    int c;
    cout<<"Input a b:";
    cin>>x>>y;
    a=new int(x);
    b=new int(y);
    c=b-a; //记录a与b的首地址距离
    a=a+(c^0x80000000); /*
                                       a地址加上距离c得到b地址
                                      (因为*a与*b之间的大小关系,
                                       c^0x80000000目的是为了
                                       对距离值取反,否则就会出
                                       现地址增减方向上的错误)
                                       */
    b=b-(c^0x80000000);
    cout<<"After Swap"<<endl;
    cout<<"a Value:"<<*a<<endl;
    cout<<"b Value:"<<*b<<endl;
}

也是用了中间变量,可能这样不够完善,但和c=a;a=b;b=c;比较起来要好得多。
毕竟c=a;a=b;b=c;当数据量大了的时候是有程序崩溃的危险的。
现在这个中间变量只记录两首地址的距离,在存储量上应该没问题。

这些应该是最基础的东西,复习下也好~~~



posted @ 2007-03-20 23:11  随机  阅读(243)  评论(5编辑  收藏  举报