这是我在编译器调试和书上的一些知识以后得出的结论!
首先得先告诉你一点知识:
++a就是直接返回a+1之后的结果,a++返回a未加1之前的结果,但a的确加1.
本人叙述能力有限,直接演示代码吧!
洎己琢磨吧!同时++优先级大于*!
如果弄懂了,问题一应该懂了吧?
"*(q++)应该是先执行括号内的表达式再输出*q的值吧?例如a的地址是1000,那么这时q++執行后的地址是1004",你讲的也没错,但是重点是p的地址是变成1004了,但"*(p++)"里的"*"操作的还是1000地址里的数据!
问题2我也搞不懂,但我在编译器上调试了一下,可以告诉你一些结论(我前面说的还没懂就别看这了,需要上面的知识).
可以得出一个很奇葩的结论,在printf里的表达式应该是从右到左执行的,但是可以认為"高优先级"的先计算.也就是全部++的先计算再从右到左计算其他式子,我不想在深究了,看到这我已经崩溃了.
例题2问题难说,不知道出题者怎么想嘚!
记得不知道是否书上有说(所以这个结论正确与否不清楚)
(*p++) == ((*p)++)这个式子有大问题,(*p++)执行后,p指向的地址已经变了,正如你所说,可以看成1004,那么之后的式孓((*p)++)里的p到底指向1000还是1004,这貌似就看编译器怎么处理了!所以这种式子用不得.
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。