xdm,这道程序阅读题输出为啥是7,3呀,想不通,能解释一下么,我觉着是5,5,谢谢了
printf解析是从右向左开始解析的。
相信你前面都明白,直接从printf说起:
一开始p->a == 3 没毛病,依照结论,printf自右向左解析,(p++)->a后置++是先使用再++,那么此时p->a == 3,然后再++ p->a == 5,再向左解析(++p)->a,前置++是先++再使用,此时p->a == 7了,故打印出来的是7 3
C/C++语言标准里没有规定函数参数的计算顺序,不同编译器实现也就有可能不一样,因此你的代码中,到底是先算++p还是先算p++是不确定的,在不同编译器上得到的结果也就有可能不同,再多讨论也没有意义,建议你以后别写这种代码。
详情请参考
FROM https://en.cppreference.com/w/cpp/language/eval_order
Order of evaluation of any part of any expression, including order of evaluation of function arguments is unspecified (with some exceptions listed below). The compiler can evaluate operands and other subexpressions in any order, and may choose another order when the same expression is evaluated again.
你这是c++啊哥们