c程序解析

来源:百度知道 编辑:UC知道 时间:2024/06/30 00:32:04
#include<stdio.h>
int main()
{
int i=2;
while(--i);
printf("%d",i);
}

#include<stdio.h>
int main()
{
int i=2;
while(i--);
printf("%d",i);
}
的运行结果分别是多少?
谁帮我分析一下
--

运行了下,结果如下:
第一个为:0
第二个为:-1

分析如下
对于第一个:i初始值为2,while循环时,--i后为1,即为真;继续循环,--i后为0,即为假,停止循环,故最后值为0.
对于第二个:i初始值为2,while循环时,i--时i 值还为2,即为真,循环后i为1;继续循环,i--时i为1,循环后为0;继续循环,i--,发现i为0,退出循环,之后i为-1,故最后值为-1.

做该题原则如下:
--i为:先减1再操作;
i--为:先操作再减1.

就是判断后再减去和先减在判断的问题!
1:0(先减再判断)
2:-1(先判断再减)

while (--i); i 会停在 0;
while (i--); i 会停在 -1;
问题关键在C/C++ 运算符优先序 ++/-- 操作优先于逻辑判断, 而 --i 和 i-- 的差别在于 --i 先算再取结果,i-- 先取结果再算,基于此,结果也就出来了。

第一个:0
--i是i先减1,再取值; 所以为i=0时跳出循环,i的值为0;
第二个:-1
i--是i先取值,再减1; 所以i=0时跳出循环,但是i还要再减1,所以i为-1;

不知道我这么说你清楚了没有

#include<stdio.h>
int main()
{
int i=2;
while(--i); //当i为0是退出循环
printf("%d",i); //所以最后输出为0
}