面试题答案
一键面试定义
- 引用:是已存在变量的别名,定义时需指定关联的变量,语法为
类型 &引用名 = 已存在变量;
,例如int a = 10; int &ref = a;
。 - 指针:是一个变量,存储的是另一个变量的内存地址,定义语法为
类型 *指针名;
,例如int *ptr;
。
初始化
- 引用:必须在定义时初始化,一旦初始化后就不能再引用其他变量。
- 指针:定义时可不初始化,但使用未初始化的指针会导致未定义行为,初始化时需指定一个变量的地址,例如
int a = 10; int *ptr = &a;
。
内存分配
- 引用:不占用额外的内存空间,它只是目标变量的别名,和目标变量共享同一块内存。
- 指针:本身占用内存空间,在32位系统中一般占4字节,64位系统中一般占8字节,用于存储所指向变量的内存地址。
使用方式
- 引用:使用时就像使用原变量一样,直接通过引用名访问和操作数据,例如
ref = 20;
。 - 指针:需要使用解引用运算符
*
来访问所指向内存中的数据,例如*ptr = 20;
;访问指针本身的地址需使用&
运算符,如cout << &ptr;
。
空值处理
- 引用:不存在空引用,因为引用必须在定义时初始化,所以总是指向一个合法的对象。
- 指针:可以有
NULL
(C++11之前)或nullptr
(C++11及之后)指针,表示不指向任何对象,在使用指针前需要检查是否为nullptr
,如if (ptr != nullptr) { *ptr = 20; }
。