能不能解释一下为什么会是答案是的顺序?

img


为什么输出的是这样的?为什么不是“5 6 7 8 9
9 3 5 7 9 ”?这里面的运算顺序具体到底是什么样的?

第一个cout中,*p++的意思是*(p++),即先将p的当前值赋给括号运算符,然后将指针p的值+1,即p指向第二个值,所以第一个cout打印的值为数组a的第一个值3
第二个cout中,(*p)++的意思是先将指针p指向的值打印,然后将指针p指向的当前值自增+1,所以第二个cout为先打印数组a的第二个值5,然后将第二个值5+1,即当前数组a的值为[3, 6, 7, 9]
第三个cout中,++*p的意思是++(*p),即先将指针p指向的值6取出,然后对6进行自增操作,所以第三个cout为打印数组的第二个值6+1后的结果7,此时数组a的值为[3, 7, 7, 9]
第四个cout中,++(*p)的意思是先将p指向的值7取出,然后对7进行自增操作,所以第四个cout为打印数组a的第三个值7+1后的结果8,此时数组a的值为[3, 8, 7, 9]
第五个cout中,*++p的意思是*(++p),即先将指针的值+1,指向数组a第三个值7,然后将当前p指向的值取出进行打印,所以第五个cout为打印数组a的第三个值7
第六个cout中,*(++p)的意识是首先将指针p的值+1,指向数组a第四个值9,然后将当前p指向的值取出进行打印,所以第六个cout为打印数组a的第四个值9

最后的for循环即是逐个打印数组a的值,数组a在第四个cout中改变之后保持不变

指针指向数组地址,指针偏移表示指向数组元素的地址变化,指针值改变表示数组元素当前值改变,区分清楚指针指向地址偏移还是指针的值改变