当前位置:乐求学 >

好好学习 >考研 >

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]的赋值也不会成功.

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

et(12,12);

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

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

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

Point &pt3;

pt3=pt1;

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

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

指针:

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

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

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

function pointer type:指代一个函数

标签: 指针 面试 引用
  • 文章版权属于文章作者所有,转载请注明 https://m.leqiuxue.com/kywx/gv9e9.html