为什么第一个*p输出的是2??

img


printf那两行都很疑惑,到底是怎么进行赋值的?*p不是该去数组a的首地址吗?

第二行好理解 上一行 p地址自增两次自减一次 此时已经指向了a[1] 所以输出2 3;
第一行运算从右往左 (先了解 号和自增自减的优先级)
第一步:
(p--)做完取值再自减得到1 ,然后指针指向自减1(其实这里我的理解就跟越界一样,只不过是地址所以没影响)
第二步:接下去做*++p 指针指向加1后取值得到1
第三步:*(++p)和前一个同理指针指向+1取到2,
第四步:最后*p直接取2
这里涉及到printf()链式输出 从右往左运算 这是我的理解 可能还有其他说法吧
有帮助的话麻烦采纳一下