首页 > 就业 > 笔试

C++面试常用问题:"引用"与指针的区别

C++面试常用问题:"引用"与指针的区别



C++面试常用问题:"引用"与指针的区别

  指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。

  程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。此外,就是对函数传ref和pointer的区别。

  拓展阅读:

  引用:

  (1)&在此不是求地址运算,而是起标识作用。

  (2)类型标识符是指目标变量的类型。

  (3)声明引用时,必须同时对其进行初始化。

  (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。

  int a=2,int &ra=a;

  a为目标原名称,ra为目标引用名。给ra赋值:ra=1; 等价于 a=1;

  (5)对引用求地址,就是对目标变量求地址。&ra与&a相等。即我们常说引用名是目标变量名的一个别名。别名一词好像是说引用不占据任何内存空间。但是编译器在一般将其实现为const指针,即指向位置不可变的指针。即引用实际上与一般指针同样占用内存。

  (6)不能建立引用的数组。因为数组是一个由若干个元素所组成的集合,所以无法建立一个由引用组成的'集合。但是可以建立数组的引用.

  例如: int& ref [3]= {2,3,5};//声明ref引用的数组错误

  但是可以这样写:

  const int (&ref)[3] ={2,3,5}; //gcc编译的时候加上选项 -std=c++0x

  ref[0] = 35; //错误

  为什么要加上const ,因为{2,3,5}此时是个字面值数组,是保存在代码段里,只读的属性,如果不加,编译错误,而且后面对ref[0]的赋值也不会成功.

  需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词。因此,当下面的语句执行后:

  pt1.offset(12,12);

  pt1和pt2都具有(12,12)的值。

  引用必须在定义时马上被初始化,因为它必须是某个东西的同义词。你不能先定义一个引用后才

  初始化它。例如下面语句是非法的:

  Point &pt3;

  pt3=pt1;

  那么既然引用只是某个东西的同义词,它有什么用途呢?

  下面讨论引用的两个主要用途:作为函数参数以及从函数中返回左值。

  指针:

  C++标准中规定,“指针”概念不适用于成员指针(不包含指向静态成员的指针)。

  C++标准规定,指针分为两类:

  object pointer type:指向void或对象类型,表示对象在内存中的字节地址或空指针。

  function pointer type:指代一个函数

相关内容

热门阅读
随机推荐