n为整型常量,且n=2,while(n--); pronef(%d,n); 执行后的结果是-1,为什么

[复制链接]
查看11 | 回复7 | 2011-9-19 01:24:14 | 显示全部楼层 |阅读模式
回复

使用道具 举报

千问 | 2011-9-19 01:24:14 | 显示全部楼层
当n=2时,执行while语句,由于20,执行空语句,且n=1第二次执行,由于10,执行空语句,且n自减的n=0第三次执行,由于n=0,所以退出循环,但同时n会自减1,得n=-1
回复

使用道具 举报

千问 | 2011-9-19 01:24:14 | 显示全部楼层
n--作为后缀符号是先判断再进行减一运算这个要知道首先先判断n=0跳出循环但是前面说了是先判断再减1运算那么很显然的打印的n肯定为-1了改成--n就是打印的0先进行减1运算再来判断当判断为0时直接退出因为减1运算是在判断之前的
回复

使用道具 举报

千问 | 2011-9-19 01:24:14 | 显示全部楼层
当n=0时,while退出循环,然后n-1,所以打印出-1
回复

使用道具 举报

千问 | 2011-9-19 01:24:14 | 显示全部楼层
while(n--)你想的是当n=0的循环会结束但是结束之前他会在临死前执行n--...然后就变成-1了#includestdio.hintmain(){intn=2;while(n--){}printf(\"%d\",n);}用VC6.0按F11测试单步运行试试你就会有所发现不要依靠输出函数多按F10,F11追问为什么会再执行一次啊,可以讲一下么
回复

使用道具 举报

千问 | 2011-9-19 01:24:14 | 显示全部楼层
while判断....是先完成()里面的操作才进行判断的...n=1的时候n--返回的是1然后n=n-1当n=0的时候n--返回的是0然后n=n-1;
回复

使用道具 举报

千问 | 2011-9-19 01:24:14 | 显示全部楼层
等价于n=2;while(1){intt;t=n;n--;if(t==0)break;}
回复

使用道具 举报

千问 | 2011-9-19 01:24:14 | 显示全部楼层
n--的意思是先用了n然后再减1到最后一步,n==0就跳出while但是由于先用n再减1,寻么n就再减1这和--n是不同的,--n是n减了1再用n
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行