You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组指针引用与解引用时的异常行为及原因咨询

代码解析与问题解答

先拆解代码里的关键指针逻辑:

  • &a的类型是指向int[5]数组的指针(即int (*)[5]),并非指向单个int的指针。
  • &a + 1:指针加法是按其指向类型的大小偏移的。这里&a指向的是5个int组成的数组,所以加1会直接跳过整个数组的内存空间(偏移5 * sizeof(int)字节),最终指向数组a最后一个元素(5)的下一个内存位置。
  • (int*)(&a + 1):将上述指向数组的指针强制转换为int*类型,此时p是一个指向单个int的指针,指向的是数组a末尾之后的位置。
  • *(p - 1):int*类型的指针减1,会偏移sizeof(int)字节,刚好回到数组a的最后一个元素(5)的位置,所以取值结果是5。
  • *a + 1:数组名a在表达式中会退化为指向第一个元素的int*指针,*a就是第一个元素1,加1后得到2。

这就是为什么最终输出是2, 5,而非你预期的2, 1。

内容的提问来源于stack exchange,提问作者NiceLP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:15:15