C运营商和评估

时间:2015-09-08 08:00:48

标签: c operators

#include<stdio.h>
int main()
{
int i=3,val;
val=sizeof (f(i))+ +f(i=1)+ +f(i-1);
printf("%d%d",val,i);
getch();
return 0;

}
int f(int num)
{
return num*5;
}

编译器编译程序并给出输出7 1 ..&#34; + +&#34;意味着???

1 个答案:

答案 0 :(得分:2)

首先请注意,sizeof是可编译的,因此val中的第一个字词为sizeof(int)intf的返回类型。

要分配给val的整个表达式的值是 undefined ,因为+作为二元和一元运算符未按顺序排序。实质上,您不知道在i = 1评估之前或之后是否会发生i - 1

就具体情况而言,a + + b被评估为a + (+b)+b只是一元加(几乎一个无操作,但确实做了一些微妙的类型强制),另一个+是加法运算符带两个参数。