int main()
{
int i = 2;
int num;
num = (i++)+(i++)+(i++)+(i++);
printf(“num = %d,i = %d\n”,num,i);
}
运行结果:num = 8,i = 6
上面程序可等价为:
num = i + i + i + i;
i++;
i++;
i++;
i++;
先输出num,i再自加;
★★★ 在num = 这个语句中当碰到结束符时,i++才执行,结束符共有三个:1.分号“;” 也就是上面num = 语句结尾的分号 2.逗号“,” 这个在下面的程序中会有体现 3.函数的括号
#include<stdio.h>
int main()
{
int i = 2;
int num;
num = (++i)+(++i)+(++i)+(++i);
printf(“num = %d,i = %d\n”,num,i);
}
运行结果:num = 19,i = 6
前两个++i相加等价于i = i + i;i = i + 1;运行完i = 4然后num = i + i = 8;然后num = 8 + (++i);等价于i = i + 1 = 5;
num = num + i = 13;最后一个++i同理,得出结果。
#include<stdio.h>
int main()
{
int i = 2;
i = i * (i + (++i));
printf(“i = %d\n”,i);
}
运行结果:i = 18
这个程序是先运行括号里的两式,理由同上
#include<stdio.h>
int main()
{
int i = 2;
i = i * ((i++) + (++i));
printf(“i = %d\n”,i);
}
同理,当遇到逗号结束符时i++才执行
#include<stdio.h>
int main()
{
int i = 2;
i = (i++)+(++i)+(i++) + (++i);
printf(“i = %d\n”,i);
}
#include<stdio.h>
int main()
{
int i = 2;
i = (++i) + (i++) + (++i) + (i++);
printf(“i = %d\n”,i);
}
运行结果:i = 16
★★ i++被替换为数值,++i被替换为变量名
#include<stdio.h>
void func(int a,int b,int c,int d,int e)
{
printf("a = %d\n",a);
printf("b = %d\n",b);
printf("c = %d\n",c);
printf("d = %d\n",d);
printf("e = %d\n",e);
}
int main()
{
int i = 2;
func(++i,i++,i++,i,++i);
return 0;
}
结果:6 4 3 6 6
函数形参从右往左获取值,第一个++i运行完i = 3,因为++i和i都被替换为变量名,所以这时为func(++i,i++,i++,i,i),
然后运行中间的i++,i++被替换为数值,也就是3,这时为func(++i,i++,3,i,i),继续往左碰到了逗号,我前面说函数
函数的括号为结束符,所以中间的i++要执行,i就变为4,继续往左,变为func(++i,4,3,i,i),同理遇到逗号,i变为5,
最后运行++i,i = 6,func(6,4,3,i,i),后面两个i现在也为6,所以输出结果为6 4 3 6 6.