while循环中i++和++i有区别吗

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-08-01
将i++放在while条件里和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;



这要看具体的代码, 如果只是进行加一的操作, 应该没有什么区别

  • while循环中,int result;int i为什么要分开写,而不是int i,result?
    答:两者等效,都可以。int result;int i 这种方式定义更容易理解,可以分别加注释。
  • C++问题,while(i-->0) 什么意思
    答:}第二次: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循环进行替代,使代码的排版格式好看一些。用法:for循环可以设置次数,while循环条件满足没有次数限制。
  • C语言里,while的循环体一定要用花括号括起来么…
    答:不一定,当循环体的语句超出一句时,需要用花括号括起来,但是如果循环体只有一条语句时,就可以省略花括号。举例如下:include <stdio.h>int main(){int i=0;while(i<3)i++;printf("i=%d",i);}这个循环体只有 i++ 一条语句,执行的结果如下:...
  • 编写Java程序,使用while循环语句计算1+1/2!+1/3!…1/20!之和.
    答: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类型,+=:会自动类型提升,而=则不会 所...
  • C语言中while(!i)什么意思
    答:while(!i)表示当i=0时,一直执行while循环内部的语句。!表示非操作,即非0的非为0,0的非为1
  • 请问do...while(i++)和while(i++)中的i++为什么一个i先用再增一个先增...
    答:很高兴和你一起学习和讨论C/C++ ,下面是我的理解,希望对你有所帮助。do{ // 表达,1 先执行{ } 内的表达式 } while(表达式2);先执行{ } 内的表达式,再执行表达式2,如果表达式2 不等于0 再次执行{} 内的表达式 3. while(表达式1) // 先执行 表达式1,如果表达式1 不等于0, 再执行...
  • ...int i=0; while(i<10) { i++; printf("%d\n",i); }
    答:第一个循环先判断i<10,满足条件后输出i,再++i,所以第一个输出是0,当i=10的时候循环终止,所以不再输出10了 第二个循环先判断i<10,在++i,在输出,当i=0时先++i,所以第一输出是1,当i=9时,循环继续,++i后输出,所以最后一个输出是10 如果这样写,二者才相同:int i = 0;while(i...
  • 关于++i和i++在while循环执行问题请教
    答: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);//加法循环 ...
  • java中如何定义i,while(i!=i){}可以是无限循环?
    答:想要while循环体无限循环,就必须让while()的条件为真也就是 括号里的值为true。while(i!=i){}不但不是无限循环,而且一次都不进如循环体,因为 i!=i这个条件永远为false。设置while无限循环可以这样设置:while(1==1){}