C语言,为什么这个是25

img

img

s+=a++,先执行s=s+a,然后再令a++,所以s=5;
sa++同理,因为if语句里的a是局部变量,退出if语句,里面定义的a就不存在了,所以a=5(在开头定义的全局变量 int a=5),所以s=a++=5*5=25

s+=a++要先算s=s+a之后再算a++,所以s+=a++中s的值为5;同理s*=a++也是一样的算法,所以答案是25

s=5 a=5 所以 最后 是25=5*5

a++优先级比*高,先加1

if(a>0){}里面定义了int a=3,这个a只在当前花括号内生效,因此s+=a++,a是先参与加法,然后++,参与加法时a数值为3,所以s=s+a=2+3=5;
s*=a++,这个a是属于全局变量a,a同样是先参与乘法,然后++,参与乘法时a数值为5,s=sa=55=25。

明白两点就知道为啥是25了。

  1. 变量a 定义了两个,一个是全局的 a = 5, 另一个是局部的 a = 3。局部变量的作用域只在if语句的大括号内。
  2. a++ 是先运算,再自增。
    所以if 内,s + a++ 实际上是3 + 2 = s ,然后 a = a+1;
    if外的乘法类似,但此时a 取的是全局变量的a = 5. 先乘,再给a自增