C语言一道简单的问题.请高手指点一下.

2025-04-14 18:39:41
推荐回答(1个)
回答(1):

你这题相当复杂,我经过多次调试才得出答案,++p,或者p++之前还是之后用稍微学过的都知道,这里我就不说了。

这里讲重点,++和*是运算优先级相同的运算符,因此同时出现在一个语句中而且没有()的情况下就看语句的结合规律,它们的结合规律是自右向左。

因此第一个printf语句中*p++,先结合++,也就是说在调用p之后p的地址++,因此对a的值没有影响,第一句运行完,a的值仍是2。

再看第二句,这里更绝,语句是从右向左读的,注意(*q)++这里有括号,因此在输出了a的值后a++了,因此前面的*p的值是3了,这里最应该注意的是语句是从右向左读的,你将(*q)++改成(*q)--就能验证这一事实。

说了这么多,希望你在C语言的学习中多看多想,还有更重要的是多动手测试你的程序,自己找到答案才是最有收获的,希望能在今后的学习中和大家共同进步。