关于C语言的自增问题

发布时间:2024-06-01 21:02 发布:上海旅游网

问题描述:

int i,k;
i=3;
k=++i+(++i)
此时的结果K=10,i=5;

i=3;
k=i+++(++i);
此时K=12,i=7

实在搞不明白以上两个例子是怎么算出来的,尤其是第二个例子。
关于自增符号都带括号的自增问题也看了几个讲解的例子,大概也明白点。但这种前边不带括号,后边带括号的运算顺序就糊涂了,求高人指教!

问题解答:

第一题挺简单的,++优先级是很高的(所有单目运算符的优先级都很高,仅次于扩号),所以要在所有++运算完之后再运算+法,也就是说,在运算+之前,i已经进行了两次自増,由3增到了5,然后再相加,k当然就等于10了。
第二题,你是不是看错题了?或者书印刷错误?这个k的值应该是8啊。C语言采用的是“最长匹配原则”,也就是在保证表达式有意义的前提下,从左到右尽可能多地将字符组成一个运算符,所以i+++(++i)等于是(i++)+(++i);i++是先引用后自増,运算完i++后,i变成4,但是i++表达式的值却是3,然后接着运算++i,这时是先自増后引用,i=4的前提下自増,i就变5了,所以++i的表达式的值是5,然后运算+法,所以之后,k=8,i=5。

//应该主要考察运算符的优先级
// ++i+(++i)= 4+(5+1)=10 i加了2次,++i都是先+后使用
// i+++(++i)=3+(1+4)=8 i++先使用后+
// i都是加2次为5

这个搞不懂就不要去搞了,我也搞不懂,实际上谁会这样用啊,用了可能会有问题的,把时间花在更有意义的学习上!
在同时出现i++,++i,i中的两个时,有的编译器就会出现不确定,可能先算i,可能先算++i;

第一个答案是对的
k=++i+(++i);
i先自增 从右向左算 先算(++i) i=4
后算++i i=5;
把i=5代入 k=5+5=10 i=5

第二个答案是错误的
k=i+++(++i)
(++i) i=4
i++先运算在自增
k=4+4=8 然后 i++ i=5

看这种情况我感觉两个是在一个函数中
在第二个运算之前 i=5
然后(++i) i=6
k=i+++(++i) k=6+6=12
然后 i++ i=7
应该是这个样子的 不然第二个就不对了

第一个是k=++i+(++i)等价于k=(++i)+(++i) 先++i,这是i=4,然后再++i,i=5,然后再k=i+i=10
第2个是错误的 答案是K=8,i=5 ,先++i,这是i=4,然后再k=i+i=8,最后i++,i=5

热点新闻