c=a++/--b
看一下你的这句话编译器是如何执行的:
1.
编译器现执行=右边的
a++/--b
把这个式子的返回值赋给c
2
执行a++/--b
类似于执行
int
operator/(
const
int
lhs,
const
rhs
)
的一个过程,首先压栈两个参数
a是后++也就是先压栈后++,所以进入operator/的lhs
是5不是6,压第二个参数--b是前--所以压入的rhs是3,然后执行5/3
又因为int/int是返回int而且是只舍不入的int,所以opertaor/返回1
注意这个1还是int型的,然后
float
c
=
1;
即把int的1转为float然后赋值给c
所以最后c为1.0000
你要直到在C语言中,当除数和被除数都是int型是,/
运算符在运算时会直接取整
列如:3/2
在C语言中的值是1,并不是1.5
如果要得到正确值,应该除数和被除数是浮点型才可以。即c=(double)a++/--b;就可以了。
先帮你把代码弄齐,你继续追问,我再回答吧
#include
int
adds(int
x,int
y)
{
static
int
m=0,n=3;
n*=++m;
m=n%x+y++;
return(m);
}
void
main()
{
int
a=5,b=-1,c;
c=adds(a,b);
printf("%d",c);
c=adds(a,b);
printf("%d\n",c);
}
过会就吃饭了,速度帮你回答吧
static变量是不变的,第一次调用返回2,n,m的值也变成了3,2;
对于++运算符,++在前面就先加1,再运算;在后面就先运算,在加1;