C语言中的一个简单自加问题

发布时间:2024-04-30 02:38 发布:上海旅游网

问题描述:

j=5,i=5;
i=(i++)+(i++)+(i++);
j=(++j)+ (++j)+ (++j);
最后输出j值是多少呢,是不是在TC.20和V.C两种不同的编译器,最后所以得出的结果是不同呢.费请大侠帮我耐心讲解一下,如果求值?

问题解答:

在这两个中是一样的,
i=(i++)+(i++)+(i++);
j=(++j)+ (++j)+ (++j);
最后输出j值是多少呢
想一下,你这样问,是不是要改成
j=(i++)+(i++)+(i++);//把第一个i改成j
j=(++j)+ (++j)+ (++j);

这问题貌似简单,其实很难.

答案见
http://zhidao.baidu.com/question/47745951.html?si=1

建议其他几位也看看,长见识

j=5,i=5;
i=(i++)+(i++)+(i++);
i=5+6+7最后为18
j=(++j)+ (++j)+ (++j);
j=6+7+8最后为21
答案相同

这要看编译器,有的编译器执行表达式的时候,采取从左到右的顺序,而有的是从右到左,不同的顺序会导致不同的结果。

研究这些刁钻古怪的问题有意义吗?
编程的时候会用到吗?
有时间多研究研究算法

是这样
i=(i++)+(i++)+(i++);
相当于
i=(i+1)+(i+2)+(i+3);

j=(++j)+ (++j)+ (++j);
相当于
j=j+j+j;
不过不同的编译器和计算机可能有不同的值,因为有些机器是从左到右检查,有些是从右到坐检查,你自己去编译一次看看自己是怎么样的编译方式就可以了。

热点新闻