首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个关于c语言与c++传地址的有关问题,请大家来看看

2012-03-19 
一个关于c语言与c++传地址的问题,请大家来看看void swap(int *x, int *y){int *temptempxxyytemp}

一个关于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。我是这样子理解的。不知道对不对。

热点排行