引用传值和指针传值的区别 c++中可以按引用传值,也可以按指针传值。这两种直接修改传递过来的‘源’值,请问这两种有什么区别不同嘛?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是指针和引用的区别啊.引用就是别名, int a = &b,a是b的引用.a变化也会导致b的变化.in *p = b,p指向b对应的地址,b的内容变化并不会引起指针p的变化(指针内容*p的值会变化).同样,p的地址变化,也不会影响b的内容变化.建议看一下c++的相关书籍. int b=11;int a=&b;//按楼上说的,这里是a对b的引用,可是这个怎么编译不过,说 error C2440: 'initializing' : cannot convert from 'int *__w64 ' to 'long' 楼上的不对吧!int b=0;int &a = b; //引用申明时必须初始化,所以不可能为空,而指针可为空int *c = &b; 另外,我觉得 &a 才是 a 的引用 int a=(int)&b//你这个不是引用,而是取地址 int a=(int)&b//你这个不是引用,而是取地址 to marckle(小马哥) :int b=10;int a = &b;//这样编译不通过修改为int b=10;int a = (int)&b;//这样a的值不是对b的引用,a存储的是个地址 sorry,写错了. int &a =b,上面写的是取地址. 首先,int b=11;int a=&b;//按楼上说的,这里是a对b的引用,可是这个怎么编译不过,说 error C2440: 'initializing' : cannot convert from 'int *__w64 ' to 'long'之所以通不过是因为a定义的是一个普通的整形变量,而&b是取变量b的地址值,这个和引用不同。可以改为:int &a=b;就对了。其次,函数中传引用值是直接给实参取了一个别名,在函数中操作使用这个别名和使用原来的传进来的实参一样,不会产生一个临时变量进行操作。而如果在函数中传变量的指针,其结果也可以通过指针间接的访问该变量,也可以改变该变量的值,但传指针或传地址本身还是属于传值调用,也就是说同样是给传进来的实参也就是指针申请了一个临时指针变量进行操作。最后,可以参考分析以下程序:void swap(int *a, int *b){ int *temp; temp=a; a=b; b=temp;}//该函数不能交换两个整数void swap(int &a,int &b){ int temp; temp=a; a=b; b=temp;}//该函数可以交换两个整数 网页中嵌入MFC开发的OCX控件,Tab键顺序的问题 [win32]为什么调用SetWindowLong(),窗口客户区大小被改变了? 编程导入导出证书 我有个项目,不知有人做否? 管道获取子进程输出问题 关于怎样调用word(解决了可以多给分) 如何根据菜单的ID的不同而进行相应的处理,在线等待,UP者有分 为什么会这样呢?关不掉的对话框 关于软件如何发布和自动升级的问题 简单问题,nt\win2000的多线程性能怎么样?一个程序最多开多少线程比较合适? 如何生成一个.wav文件? 关于DWORD的问题
引用就是别名, int a = &b,a是b的引用.a变化也会导致b的变化.
in *p = b,p指向b对应的地址,b的内容变化并不会引起指针p的变化(指针内容*p的值会变化).同样,p的地址变化,也不会影响b的内容变化.建议看一下c++的相关书籍.
int a=&b;//按楼上说的,这里是a对b的引用,可是这个怎么编译不过,说 error C2440: 'initializing' : cannot convert from 'int *__w64 ' to 'long'
int b=0;
int &a = b; //引用申明时必须初始化,所以不可能为空,而指针可为空
int *c = &b;
//你这个不是引用,而是取地址
//你这个不是引用,而是取地址
int b=10;
int a = &b;//这样编译不通过修改为
int b=10;
int a = (int)&b;//这样a的值不是对b的引用,a存储的是个地址
int b=11;
int a=&b;//按楼上说的,这里是a对b的引用,可是这个怎么编译不过,说 error C2440: 'initializing' : cannot convert from 'int *__w64 ' to 'long'之所以通不过是因为a定义的是一个普通的整形变量,而&b是取变量b的地址值,这个和引用不同。
可以改为:int &a=b;就对了。其次,
函数中传引用值是直接给实参取了一个别名,在函数中操作使用这个别名和使用原来的传进来的实参一样,不会产生一个临时变量进行操作。
而如果在函数中传变量的指针,其结果也可以通过指针间接的访问该变量,也可以改变该变量的值,但传指针或传地址本身还是属于传值调用,也就是说同样是给传进来的实参也就是指针申请了一个临时指针变量进行操作。最后,可以参考分析以下程序:
void swap(int *a, int *b){
int *temp;
temp=a;
a=b;
b=temp;
}//该函数不能交换两个整数void swap(int &a,int &b){
int temp;
temp=a;
a=b;
b=temp;
}//该函数可以交换两个整数