y++,x+=++y;怎么运算?x=y=0;while(x<15) y++,x+=++y; printf("%d,%d",y,x);讲解下y++,x+=++y;怎么运算?
如果int y=0;那为什么printf("%d",y++);他就输出0呢?这个是算一个语句吗?
printf("%d",y++); 这是同一个语句啊,先取值输出,再自增。
如果是这样它就不是同一个语句:
y++,printf("%d",y);
这个时候就是输出1
请注意,y++,printf("%d",y); 这里面出现了两个逗号,但它们的含义是不相同的,前一个逗号是运算符,用于把多个表达式(或语句)组合成一个表达式,而后一个逗号是参数分隔符,用于语句或函数区分多个参数。
根据追问:原来提问者只是想测试y,不管程序的目的,用逗号把两个语句变成一个语句,以为y值就不会变化了,那直接测试用
printf("%d",y++);和 printf("y=%d,y=%d\n",y++,y++);
前面一个是输出0,后面一个是输出1,0。后面是同一个语句y的值还是会变化。
首先这是程序,所以语句写法要规范:
int x=0;
int y=0;
需要说明数据类型。
另外循环体要用{ y++;x+=++y;}
否则只执行一句y++;变成死循环。
程序的问题不多说了,就按照思路来看结果,重点讲解y++;x+=++y;
第一次执行循环体:y++; 确实是先使用,后自增,也就是执行完这一语句后,y=1。
x+=++y;注意这是接下去的一句,这时候y=1,然后++y是先增加y=2,再使用,
所以x=2。
第二次执行循环体:y++; 也是先使用,后自增,也就是执行完这一语句后,y=3。
x+=++y;注意这是接下去的一句,这时候y=3,然后++y是先增加y=4,再使用,
所以x=6。
第三次执行循环体:y++; 也是先使用,后自增,也就是执行完这一语句后,y=5。
x+=++y;注意这是接下去的一句,这时候y=5,然后++y是先增加y=6,再使用,
所以x=12。
最后一次执行循环体:y++; 也是先使用,后自增,也就是执行完这一语句后,y=7。
x+=++y;注意这是接下去的一句,这时候y=7,然后++y是先增加y=8,再使用,
所以x=20。
最后输出:8,20,如果把打印语句也放进循环体内(后面加\n换行),则输出:
2,2
4,6
6,12
8,20
具体结果和流程我倒是知道,我我现在纠结的是 y++,x+=++y;y的初值为0,先使用,x的值不是1吗?那为什么printf("%d",y++)他就输出0呢?
printf("%d",y++),先使用y,这时y=0,等执行完这一语句,y才会变1。
你下面再加一句:printf("%d",y); 因为上面一句已经执行完了,这时候输出1。
printf("%d",y++);
printf("%d",y);
你会发现输出0,1。因为前面是先使用y,后面这一句是已经使用过y了。