while循环中i++和++i有区别吗
不一样的原因不在 放while中还是循环
而是因为第一个的 m++ 是在 cout 之前,所以cout 是输出 m++之后的数
第二个 k++是在 cout之后,所以cout输出的是k++之前的数
若为while(*p1),因为*p1不为NULL,此时的逻辑值恒为真,即while循环没有循环出口,是死循环。
而while(*p1 + i)表示在数据*p1的基础上加上i,仍为数据。
while(*(p1 + i))表示在地址p1的基础上偏移 i 个单位,再取内容,当 i 自增到某个值时,会使得地址p1 + i中的内容为空,while判定值为假,退出循环。
可以参考,下面网页,网页摘自:网页链接和网页链接
然后下面是我个人的理解:
++和--(自加和自减存在两种情况):
第一种情况:自加或者自减是独立存在的语句时:
public class Test{
public static void main(String[] args){
int i = 1;
while(i<=1){
++i;
System.out.println(i);
}
System.out.println(i)
}
}
结果:循环内的i的值是2,循环外的i的值也是2。
也就是说不管是在循环内部,还是出了循环以后i的值都是2。
同样的,把循环内的++i换成了i++,以后,结果:依旧是2,不管是循环内还是循环外i的值依旧是2。
结论就是,当i++或者++i是一个独立语句的时候,i的值就只会执行自加。
同理,for循环中的i++或者++i,其实i++或者++i也是独立的语句。所以,也只执行自加。
第二种情况:自加或者自减语句不是独立语句的时候,比如还参加了其他操作或者运算的时候:
如:
int i = 0;
while(i++<3){....};
代码执行如下:第一次执行:i=0 --> 0<3 --> 执行循环语句-->i自加i=1;
第二次执行:i=1 --> 1<3 --> 执行循环语句-->i自加i=2;
第三次执行:i=2 --> 2<3 --> 执行循环语句-->i自加i=3;
第四次执行:i=3 --> 3<3(不成立) --> 不执行循环语句,
退出循环-->i自加i=4;
最终:i = 4。
int i = 0;
while(++i<3){....};
代码执行如下:第一次执行:i=0 --> i自加i=1-->1<3-->执行循环语句;
第二次执行:i=1 --> i自加i=2-->2<3-->执行循环语句;
第三次执行:i=2 --> i自加i=3-->3<3(不成立)-->不执行循环语 句,退出循环;
最终:i = 3。
再举个例子:
int a, i = 10;
a = i ++; //这里i要先赋值,再自加。语句执行后a=10, i = 11;
而如果写成:
int a, i = 10;
a = ++i; //这里i要先自加,再赋值。语句执行后a=11, i = 11;
这要看具体的代码, 如果只是进行加一的操作, 应该没有什么区别
答:两者等效,都可以。int result;int i 这种方式定义更容易理解,可以分别加注释。
答:}第二次:while(i-->0) //i值为3,先判断3>0是否为真,然后i=i-1=2{ //进到循环中,i就是2 if (i%2) //判断i是否为奇数,i=2不是,走else s+=i; else s+=i--; //此句相当于,s=s+i=4+2=6; i=i-1=1;}第三次:while(i-->0) //i值为...
答:使用for循环比较方便。如果循环处理的过程中就要将循环变量增加时,则使用while循环比较方便。还有在使用for循环语句时,如果里面的循环条件很长,可以考虑用while循环进行替代,使代码的排版格式好看一些。用法:for循环可以设置次数,while循环条件满足没有次数限制。
答:不一定,当循环体的语句超出一句时,需要用花括号括起来,但是如果循环体只有一条语句时,就可以省略花括号。举例如下:include <stdio.h>int main(){int i=0;while(i<3)i++;printf("i=%d",i);}这个循环体只有 i++ 一条语句,执行的结果如下:...
答:package practice;/ 使用while循环 计算1+1/2!+1/3!+...+1/20!a用于存储前n个阶乘分之一 sum 用于累加和 / public class WhileDemo { public static void main(String[] args) { /*i=i+1的简写形式是i+=1;但是二者有本质的区别:如果 i是short类型,+=:会自动类型提升,而=则不会 所...
答:while(!i)表示当i=0时,一直执行while循环内部的语句。!表示非操作,即非0的非为0,0的非为1
答:很高兴和你一起学习和讨论C/C++ ,下面是我的理解,希望对你有所帮助。do{ // 表达,1 先执行{ } 内的表达式 } while(表达式2);先执行{ } 内的表达式,再执行表达式2,如果表达式2 不等于0 再次执行{} 内的表达式 3. while(表达式1) // 先执行 表达式1,如果表达式1 不等于0, 再执行...
答:第一个循环先判断i<10,满足条件后输出i,再++i,所以第一个输出是0,当i=10的时候循环终止,所以不再输出10了 第二个循环先判断i<10,在++i,在输出,当i=0时先++i,所以第一输出是1,当i=9时,循环继续,++i后输出,所以最后一个输出是10 如果这样写,二者才相同:int i = 0;while(i...
答:while(i++<5)i第一次进去是1,当i出了()作用域 ,i++变成2,第一次就输出2,这里不管i++,++i;结果都一样,for(i = 1, i < 5 ; i++)等同于 i = 1;while(i < 5){ printf("%d",i);i ++;} printf("%d",i);作用域问题 while(i++<5)printf("%d",i);//加法循环 ...
答:想要while循环体无限循环,就必须让while()的条件为真也就是 括号里的值为true。while(i!=i){}不但不是无限循环,而且一次都不进如循环体,因为 i!=i这个条件永远为false。设置while无限循环可以这样设置:while(1==1){}