面试题答案
一键面试#include <iostream>
int main() {
// 定义整型数组并初始化
int arr[5] = {1, 2, 3, 4, 5};
// 定义指向数组首元素的指针
int* p = arr;
// 通过指针间接访问并修改数组的第三个元素(索引为2)
*(p + 2) = 10;
// 输出整个数组
for (int i = 0; i < 5; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
代码解释
- 数组定义与初始化:
int arr[5] = {1, 2, 3, 4, 5};
定义了一个包含5个整数的数组arr
并初始化了每个元素。 - 指针定义:
int* p = arr;
定义了一个指向int
类型的指针p
,并将其初始化为数组arr
的首地址。在C++ 中,数组名在很多情况下会被隐式转换为指向其首元素的指针。 - 指针间接访问与修改元素:
*(p + 2) = 10;
p + 2
表示指针p
向后移动2个int
类型元素的位置,因为指针的算术运算是以其所指向的数据类型大小为单位的。*(p + 2)
则是对该地址进行解引用,即访问该地址存储的值,然后将其赋值为10,从而修改了数组的第三个元素。 - 输出数组:通过
for
循环遍历数组arr
,并使用std::cout
输出每个元素。
指针间接访问原理
指针是一个变量,它存储的是另一个变量的内存地址。当我们对指针进行解引用(使用 *
操作符)时,实际上是访问该指针所指向的内存地址中存储的值。在这个例子中,p
指向数组 arr
的首元素,p + 2
计算出数组第三个元素的地址,通过 *(p + 2)
就可以访问并修改该元素的值,实现了间接访问数组元素的目的。