C++ 指针面试题
时间: 2023-07-01 13:16:52 浏览: 134
好的,下面列举几道 C++ 指针面试题供参考。
1. 指针和引用有什么区别?
指针和引用都可以用来访问内存中的变量,但是它们有以下几点区别:
- 指针可以被赋值为 `nullptr`,而引用不行。
- 指针可以在运行时指向不同的变量,而引用在声明时就必须绑定到一个变量上,并且不能更改绑定的变量。
- 指针可以进行算术运算和解引用操作,而引用不能。
- 指针可以被重新赋值为指向不同类型的变量,而引用必须与原始变量类型匹配。
2. 指针和数组有什么关系?
指针和数组有着紧密的关系,因为数组名其实就是数组首元素的地址。例如,下面的代码定义了一个数组并初始化:
```c++
int arr[] = {1, 2, 3, 4, 5};
```
可以通过下标访问数组元素,也可以通过指针访问数组元素。例如,下面的代码使用指针访问数组元素:
```c++
int* p = arr;
for (int i = 0; i < 5; i++) {
cout << *(p + i) << " ";
}
```
这里的 `p` 是一个指向 `int` 类型的指针,它指向数组 `arr` 的首元素。在循环中,我们通过指针访问数组元素,其中 `*(p + i)` 表示指针 `p` 加上 `i` 个偏移量后所指向的元素。
3. 如何避免空指针引用?
空指针引用是一种常见的程序错误,可以通过以下几种方式避免:
- 在使用指针之前,先将其初始化为 `nullptr`。
- 在使用指针之前,先进行空指针判断。
- 使用智能指针,可以自动管理指针的生命周期,并且可以避免空指针引用。
例如,下面的代码演示了如何进行空指针判断:
```c++
int* p = nullptr;
if (p != nullptr) {
*p = 10;
}
```
在这个示例代码中,我们先将指针 `p` 初始化为 `nullptr`,然后在使用指针之前,先进行空指针判断。由于 `p` 是空指针,所以不会执行赋值操作,从而避免了空指针引用。
阅读全文