如果int I=2,则k=(i++)+(++i)+(i++)执行过后k和i的值()

A.7,5 B.8,5 C.9,5 D.6,5
2024-12-04 18:36:07
推荐回答(5个)
回答1:

在C语言中,表达式i++和++i都是将变量i的值+1后,再存入i的意思。如果是单独使用,这两个走达式没什么差别,但如果将其代入到其它算式或语句中,两者是有差异的。i++表示变量 i 先参与算式运算后再+1,而++i 表示i值+1后再参与运算。所以在程序中,被代入的算式会因此而得不同结果。
具体到这个题目,如果单纯按照所写算式的先后顺序考虑,i初值为2,所以k和Ⅰ分别为
k=2+3+3=8
i=3+1+1=5
不过因为这个算式是个连加算答缺式,而加法操作的运算优先级是相同的,而启伍对同伏先级运算,编译软件在生成运行代码时,并不一定是绝对地从左至右运行,考虑到代码生成效率,可能会把相同操作归并到一起。所以在对此题的回答中,有些人指出,不同版悄举或本的编译软件运行结果会不同。这样的说法是有道理的。
最后一句,在自己编写程序时,如果不是必须的原因,还是不要这样写了。

回答2:

没有正确答案可选.
i++表达式值是正滑2,i自增为枣配3;
++i表达式值是4,i自增为4;
i++表达式值是4,i自增为5;
K的值为2+4+4是10,i的值举岩腊是5.

回答3:

这个题神裤目与编译器有游州简关,不同的编译迹激器的执行结果不一样的。

回答4:

C.i=5,k=9
附汇编:
012B3885 mov eax,dword ptr [i] /散慎斗/寄存器eax=i=2
012B3888 add eax,1 //寄存器eax++; ,eax=3
012B388B mov dword ptr [i],eax //i=eax=3
以上三句先处理了++i
012B388E mov ecx,dword ptr [i] //孝拿寄存器 ecx=i=3
012B3891 add ecx,dword ptr [i] //ecx += i ecx=6
012B3894 add ecx,dword ptr [i] //ecx += i ecx=9
012B3897 mov dword ptr [k],ecx //k=ecx=9
012B389A mov edx,dword ptr [i] //edx=i=3
012B389D add edx,1 //edx++; edx=4
012B38A0 mov dword ptr [i],edx //冲磨i=edx =4
012B38A3 mov eax,dword ptr [i] //eax=i=4
012B38A6 add eax,1 //eax++;eax=5
012B38A9 mov dword ptr [i],eax //i=eax=5

回答5:

没有正确答案 k=10;i=5;
亲测 望采纳~