回 帖 发 新 帖 刷新版面

主题:麻烦解决几道C语言题

1.执行"int k=11;k=1/3*k++;"后,k的值是____
P.S.答案选k=0,我想问一下为什么不是1,不是k后面还自加吗?

2.以下常量中正确的是______
A.'abc'  B.'\x123'   C.3.145E-1.2   D."a"
P.S.为什么C不能选?

回复列表 (共7个回复)

沙发


1.执行"int k=11;k=1/3*k++;"后,k的值是____
P.S.答案选k=0,我想问一下为什么不是1,不是k后面还自加吗?
[color=800000]优先级问题1/3得0接下来就得0;[/color]

2.以下常量中正确的是______
A.'abc'  B.'\x123'   C.3.145E-1.2   D."a"
P.S.为什么C不能选?

[color=808000]e后面是整数[/color]

板凳

k=1/3*k++;
k=((1/3)*(k++));看清优先级 明白了么

3 楼

k=1/3*k++; 这应该不是合理的语句,至少不合标准。
我记得C标准规定在两个序列点之间不能对一个变量进行两次(含两次)以上的改变。
"k="对k改变了一次,"k++"对k改变了一次。如下面都是不合法(甚至错误)的语句:

  a[++i] = b[i++] ;
  a = ++b+++b;

4 楼

[quote]
1.执行"int k=11;k=1/3*k++;"后,k的值是____
P.S.答案选k=0,我想问一下为什么不是1,不是k后面还自加吗?
[color=800000]优先级问题1/3得0接下来就得0;[/color]

2.以下常量中正确的是______
A.'abc'  B.'\x123'   C.3.145E-1.2   D."a"
P.S.为什么C不能选?

[color=808000]e后面是整数[/color]
[/quote]

第一题中不是1/3*k=0,0++=1,k=1吗?

5 楼

[quote][quote]
1.执行"int k=11;k=1/3*k++;"后,k的值是____
P.S.答案选k=0,我想问一下为什么不是1,不是k后面还自加吗?
[color=800000]优先级问题1/3得0接下来就得0;[/color]

2.以下常量中正确的是______
A.'abc'  B.'\x123'   C.3.145E-1.2   D."a"
P.S.为什么C不能选?

[color=808000]e后面是整数[/color]
[/quote]

第一题中不是1/3*k=0,0++=1,k=1吗?[/quote]
错,是右值的k进行了++,左值的k的结果是0*11=0
注意两边的k被编译器认为不是同一个k

6 楼


编译器怎么会这么识别,想不通。

7 楼

[quote]
编译器怎么会这么识别,想不通。[/quote]
简单地来说,编译器是把右值计算完,最后一次赋给左值
所以在右值上的++就没有意义了

我来回复

您尚未登录,请登录后再回复。点此登录或注册