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