数组指针引用与解引用时的异常行为及原因咨询
代码解析与问题解答
先拆解代码里的关键指针逻辑:
&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
相关产品推荐
相关产品推荐

