回 帖 发 新 帖 刷新版面

主题:请教

a 与b的指针不是在函数中已近改变了嘛?为什么函数调用结束后,a b 的地址又换回来了?
代码如下:
#include<iostream.h>
void swap(int *a,int *b)
{
int *c=0;
cout<<"swap函数中,交换前,a:"<<a<<"\t"<<"b:"<<b<<endl;
cout<<"a:"<<a<<"\t"<<"b:"<<b<<"\t"<<"c:"<<c<<endl;
c=a;
cout<<"a:"<<a<<"\t"<<"b:"<<b<<"\t"<<"c:"<<c<<endl;
a=b;
cout<<"a:"<<a<<"\t"<<"b:"<<b<<"\t"<<"c:"<<c<<endl;
b=c;
cout<<"a:"<<a<<"\t"<<"b:"<<b<<"\t"<<"c:"<<c<<endl;
cout<<"swap函数中,交换后,a:"<<a<<"b:"<<b<<endl;
}
int main()
{
int a=3,b=4;
cout<<"a的地址:"<<&a<<"  b的地址:"<<&b<<endl;
cout<<"主程序中,交换前,a:"<<a<<"b:"<<b<<endl;
swap(&a,&b);
cout<<"a的地址:"<<&a<<"  b的地址:"<<&b<<endl;
cout<<"主程序中,交换后,a:"<<a<<"b:"<<b<<endl;
return 0;
}

回复列表 (共6个回复)

沙发

你的目的是要把a存在原先存放b的内存地址中,b存在放a的原先内存地址中?

板凳

void   swap(int *&p1,   int *&p2)   
{   
    int *ptemp;   
    ptemp=p2;   
    p2=p1;   
    p1=ptemp;   
}
   
int main(void)
{
  int a=3;   
  int b=4;   
  int *pa=&a;   
  int *pb=&b;
  cout << pa << "and" << pb;     
  swap(pa,pb); 
  cout << pa << "and" << pb; 
}
因为始分配变量a和b内存的时候,是由系统来分配的,所以你没有办法能够把存a的内存地址
用来存变量b,我做的是用2个指针开始分别指向a和b的地址,调用函数后这两个指针指向的就是b和a的地址了......

3 楼

不能企图通过改变指针的值来改变指针所指的值。只能这样:
void   swap(int *p1,   int *p2)   
{   
    int temp;   
    temp=*p2;   
    *p2=*p1;   
    *p1=temp;   
}
或者用引用也可以交换两数!

4 楼

LZ说的是要交换a和b的地址吧,不是a和b的值.......
他写的代码就是想把a和b在内存的位置调换一下..不过这是实现不了的!

5 楼

[quote]不能企图通过改变指针的值来改变指针所指的值。只能这样:
void   swap(int *p1,   int *p2)   
{   
    int temp;   
    temp=*p2;   
    *p2=*p1;   
    *p1=temp;   
}
或者用引用也可以交换两数![/quote]
观点错误

void swap(int* &a, int* &b)
{
    int *c;
    c = a;
    a = b;
    b = c;
}

int main(int argc, char* argv[])
{
    int* a = new int(3);
    int* b = new int(4);
    swap(a, b);
    return 0;
}

6 楼

同意4楼的观点

我来回复

您尚未登录,请登录后再回复。点此登录或注册