一个关于c语言与c++传地址的问题,请大家来看看
void swap(int *x, int *y)
{
int *temp;
temp=x;
x=y;
y=temp;
}
调用方法:Swap(&a, &b);
为什么这个函数在c语言和c++中结果会不同?c++中不能交换,而c中却可以?
[解决办法]
另外 c++中
#include <algorithm>
好像实现了swap函数
[解决办法]
lz 的代码能实现交换?不太相信
[解决办法]
楼主的函数不是交换的代码,是将指针随意指向内存空间的代码,交换代码如下:
- C/C++ code
void swap(int *x, int *y){ int temp; temp=*x; *x=*y; *y=temp;}
[解决办法]
#include<iostream>
using namespace std;
void swap(int *x , int *y )
{
int *temp;
temp=x;
x=y;
y=temp;
}
int main()
{
int a=1,b=2;
int *x=&a,*y=&b;//我定义了两个指针,分别指向a和b。
cout<<x<<" "<<y<<endl;
cout<<"a="<<a<<"b="<<b<<endl;
cout<<"before swap:"<<"*x="<<*x<<" "<<"*y="<<*y<<endl;
swap(*x,*y);
/*如果写成swap(a,b);结果也可以调换,但是如果写成swap(x,y);就会报错。
我理解的意思是说传递的是指针所指的对象的值,而不是指针自己存储的地址*/
cout<<"after swap:"<<"*x="<<*x<<" "<<"*y="<<*y<<endl;
cout<<x<<" "<<y<<endl;
cout<<"a="<<a<<"b="<<b<<endl;
return 0;
}
//调用完后,x和y的存储地址都没有发生变化。swap(int *x,int *y)函数内的明明交换的是两个指针的
//存储地址的嘛。为什么却没有改变x和y内部存储的地址啊?而是交换了a和b的值啊。
!!!!!后来我想了一想才明白,swap(int *x,int *y)函数中的int *x,int*y并不是main()中的指针,而/是重新的,只是名字恰巧相同。把x改成m,y改成n也可以.swap中是通过定义两个指针实现值的交换,实际上传递给swap()的参数必须是值而不能是指针。可以给a和b的值,也可以用指针指向的值,比如上面的*x和*y。但是不能够是x和y。我是这样子理解的。不知道对不对。