MST

星途 面试题库

面试题:C语言指针表达式基础计算

设有如下代码:`int a[5] = {1, 2, 3, 4, 5}; int *p = a;` 请计算并解释 `*(p + 2)` 和 `p[2]` 的值分别是多少,以及它们之间的关系。
26.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. *(p + 2) 的值
    • p 是指向数组 a 首元素的指针。p + 2 表示指针 p 向后移动两个 int 类型元素的位置。
    • 因为数组 a 首元素地址为 &a[0]p 指向 a[0]p + 2 就指向 a[2]
    • 然后 *(p + 2) 对这个地址进行解引用,获取该地址存储的值。
    • 数组 aa[2] 的值为 3,所以 *(p + 2) 的值是 3
  2. p[2] 的值
    • 在 C 语言中,对于指针 pp[i] 等价于 *(p + i)
    • 所以 p[2] 就相当于 *(p + 2)
    • 因此 p[2] 的值也是 3
  3. 它们之间的关系
    • *(p + 2)p[2] 在 C 语言中是完全等价的表达式。
    • 本质上,p[2] 这种数组下标访问方式,在编译器处理时,会被转换为 *(p + 2) 这种指针偏移和解引用的操作。这是因为数组和指针在很多情况下是紧密相关的,数组名在表达式中会被隐式转换为指向首元素的指针。

所以,*(p + 2)p[2] 的值都为 3,它们是等价的表达式。