- 成都市金牛区金泉街道公开招聘社区党群服务专员公告(3-21)
- 成都市金牛区人民政府金泉街道办事处依据工作需求,按照公开、平等、竞争、择优的原则,面向社会展开社区
C++面试常用问题:"引用"与指针的区别
指针通过某个指针变量指向一个对象,然后可以对该指针所指向的变量进行间接操作。
程序中运用指针,会导致程序的可读性不佳;引用本身就是目标变量的别名,对引用进行操作也就是对目标变量进行操作。另外,还有对函数传递引用(ref)和指针的区别。
拓展阅读:
引用:
(1)&在此不是求地址运算,而是起标识作用。
(2)类型标识符是指目标变量的类型。
(3)声明引用时,必须同时对其进行初始化。
引用声明结束后,目标变量名有两个名称,一个是目标原名称,另一个是引用名,并且不能将该引用名用作其他变量名的别名。
int a=2,int &ra=a;
目标原名称为 a,目标引用名为 ra。给 ra 进行赋值操作,即 ra 等于 1;这与 a 等于 1 是等价的。
引用求地址,就是对目标变量求地址。&ra 和 &a 是相等的。也就是说,我们常说引用名是目标变量名的一个别名。别名这个词给人的感觉好像是引用不占据任何内存空间。然而,编译器通常会将其实现为 const 指针,也就是指向位置不可变的指针。这意味着引用实际上与一般指针一样占用内存。
数组是由若干个元素组成的集合,所以不能建立由引用组成的“集合”,即不能建立引用的数组。然而,可以建立数组的引用。
ref[2] = 5;//给引用数组的第三个元素赋值为 5
但是可以这样写:
const int ref[3] = {2, 3, 5}; //gcc 编译时需加上选项 -std=c++0x ,这里的 ref 是一个引用,它引用了一个包含 3 个整数的数组,数组元素分别为 2、3、5 。
ref[0] = 35; //错误
为什么要加上 const 呢?因为此时 {2,3,5} 是一个字面值数组,它具有保存在代码段里且只读的属性。如果不加 const ,就会出现编译错误,并且后面对 ref[0] 的赋值也无法成功。
需要特别强调的是,引用并不会产生对象的副本,只是对象的同义词。所以,当下面的语句被执行之后:
pt1.offset(12,12);
pt1和pt2都具有(12,12)的值。
引用需要在定义的时候立即被初始化,因为它必须是某个东西的同义词。你不能先定义引用然后才去做其他事情。
初始化它。例如下面语句是非法的:
Point &pt3;
pt3=pt1;
那么既然引用只是某个东西的同义词,它有什么用途呢?
下面讨论两个主要的引用用途:一是作为函数参数,二是从函数中返回左值。
指针:
C++标准规定,“指针”这个概念不适用于成员指针,并且这里的成员指针不包含指向静态成员的指针。
C++标准规定,指针分为两类:
对象指针类型,它指向 void 或者对象类型,意味着该类型能够表示对象在内存里的字节地址或者空指针。
function pointer type:指代一个函数
温馨提示:本内容地址http://m.ysjob.cc/article/articledetail-251886.html转载请注明,以上深入理解C++中指针与引用的区别及使用场景资讯信息来自颍上人才网(颍上地区最大的颍上人才网,颍上人才网)