引用和指针有何区别?何时只能使用指针而不能使用引用?

来源:百度知道 编辑:UC知道 时间:2024/05/20 21:44:56
引用和指针有何区别?何时只能使用指针而不能使用引用?

指针是变量的地址,通过指针可以访问到变量所在的内存单元,从而达到改变变量的目的。
例如,现在又变量 int a;a的内存单元地址是 0x2008,我现在定义一个int * p;, p=&a; 那么现在 p 的内容就是 0x2008,我执行 *p=1;就是找到地址为0x2008的 内存单元,并把 1 存入该内存单元。显然结果是 a 的值变成了1。

引用就不一样了。引用相当于起了一个别名。就好像一个人有两个名字,你使用这两个名字的效果是一样的。当引用做函数形参时,函数不再申请临时变量,而是直接使用被引用的变量。
例如:int a=0;
void change (int & b)
{
b=2;
}
change(a);
这段代码中的函数 change 形参是引用,调用该函数时,它直接处理变量 a ,因为形参是引用,它直接使用被引用的对象,即 a 。

你说的只能使用指针而不能使用引用的情况我没见过。感觉都可以用,只不过使用的方式不一样罢了。

  引用与指针区别:引用只是取得数据,无权修改,句柄就是一种引用的方式;指针是直接指向内存的,可以修改数据的。

  引用访问一个变量是直接访问,而指针是间接访问。
  引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间。
  引用在开始的时候就绑定到了一个内存空间(开始必须赋初值),所以他只能是这个内存空间的名字,而不能改成其他的,当然可以改变这个内存空间的值.
  例如
  int i = 3,j = 4;
  int &x = i;//成为i的别名
  x = j;//不能否认x仍然引用i,并没有成为j的别名,只是修改了x和j共享的内存空间的值.
  这点与指针不同,指针在任何时刻都可以改变自己的指向。

  无法让引用与其指示物分离。
  和指针不同,一旦引用和对象绑定,它无法再被重新指向其他对象。引用本身不是一个对象(它没有标识;当试图获得引用的地址时,你将的到它的指示物的地址;记住:引用就是它的指示物 )。
  从某种意义上来说,引用