VC printf 输出项位置变化,结果不一样

发布网友 发布时间:2024-10-23 20:48

我来回答

2个回答

热心网友 时间:2024-11-10 01:52

这个你需要知道printf有多个输出项的时候,执行顺序是什么。
实际上执行顺序就是从最后一个项到第一个项。所以
如果printf("\n UPPER=%ld,LOWER=%ld ",upper,fun(s)); 那么先执行fun(s),所以upper的值被修改为正确的值,输出正确
但是printf("\n,LOWER=%ld, UPPER=%ld",fun(s),upper); 是先把upper的值输出(这个时候还是0没有修改过),然后再执行fun(s),所以输出的upper永远为0。你可以在
printf("\n,LOWER=%ld, UPPER=%ld",fun(s),upper);
之后再
printf("\n,UPPER=%ld",upper);看看结果,现在就是正确的了。

热心网友 时间:2024-11-10 01:51

因为upper是受到函数fun(s)影响的,而在printf参数中,从右向左执行,因此,你第二种写法,会先得到upper,然后执行fun(s),所以为0.

你这个写法是不安全的,不推荐这样写,应该先执行fun再printf:

long int i = fun(s);
printf("\n,LOWER=%ld, UPPER=%ld",i,upper);

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com