MST
星途 面试题库

面试题:C语言指针与间接访问基础

假设有一个整型数组 `int arr[5] = {1, 2, 3, 4, 5};`,定义一个指向该数组首元素的指针 `p`,并通过指针间接访问将数组的第三个元素(索引为2)值修改为10,最后输出整个数组。请写出完整代码,并解释每一步的操作及指针间接访问的原理。
47.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#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;
}

代码解释

  1. 数组定义与初始化int arr[5] = {1, 2, 3, 4, 5}; 定义了一个包含5个整数的数组 arr 并初始化了每个元素。
  2. 指针定义int* p = arr; 定义了一个指向 int 类型的指针 p,并将其初始化为数组 arr 的首地址。在C++ 中,数组名在很多情况下会被隐式转换为指向其首元素的指针。
  3. 指针间接访问与修改元素*(p + 2) = 10; p + 2 表示指针 p 向后移动2个 int 类型元素的位置,因为指针的算术运算是以其所指向的数据类型大小为单位的。*(p + 2) 则是对该地址进行解引用,即访问该地址存储的值,然后将其赋值为10,从而修改了数组的第三个元素。
  4. 输出数组:通过 for 循环遍历数组 arr,并使用 std::cout 输出每个元素。

指针间接访问原理

指针是一个变量,它存储的是另一个变量的内存地址。当我们对指针进行解引用(使用 * 操作符)时,实际上是访问该指针所指向的内存地址中存储的值。在这个例子中,p 指向数组 arr 的首元素,p + 2 计算出数组第三个元素的地址,通过 *(p + 2) 就可以访问并修改该元素的值,实现了间接访问数组元素的目的。