printf("%d,%d,%d",i,i++,i++);输出3,3,3正确。有两个原因供参考:
i++是后++,要等输出结束后才执行加1运算;
即便是前++,如printf("%d,%d,%d",i,++i,++i);,输出也不会是3,4,5,而应该是5,5,4。因为最后一个i变成4后就压栈了,中间一个在4基础上+1自然是5,最前面的一个i值未变。当然这还与编译器有点关系,如果某编译器要等把所有列表项计算完再压栈,那这里输出就应该是5,5,5了!
按照这些规则,printf("%d,%d,%d",i+8,i+=5,i--);的输出应该是16,8,3而不应该是16,8,4。
回答 “风雷雪电”:
#include "stdio.h"
void main(void){
int i=3;
printf("%d,%d,%d\n",i,i++,i++);
}
别忘了i++,i++都是后++……
continue语句是直接进入下一次循环,从前面的if语句看,如果i为3的话,就执行continue而忽略掉printf
语句.
所以作用是打印1到4的数字除了3
结果为3,3,一个3就是i本身,第二个三是(i++)的值,(i++)的值是i本身但是最后的i变了i加一变成了4,
4 3
第一个i 是 ++之后的值 第二个i 是没++之前的值 因为是i++所有是先用后加
你要问我结果为什么是这样 我也不知道 编译器这么决定的 我用的linux gcc
3,3,
printf执行完后i=4, i++表示引用后 i+1, 如果++i表示引用前先加1