如果有表达式 a = i++ 它等价于 a = i ; i = i + 1;
如果有表达式 a = ++i 它等价于 i = i + 1; a = i;
1 首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值
2 ++i和i++都是分两步完成的。因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值(可被寻址的值);i++ 的后面一步是自增,不是左值。(2的两步分解与左右值的因果关系只是我的直觉,对错还待考证)
3 ++i 和i++ 的使用,一般来说在循环域里面,这两者并没有什么很大的区别,因为编译器一般都会给你做优化。但是要注意其生存周期,以及很难察觉的写脏,就好像指针delete以后一定要赋予0一样,我们要注意i值在程序流中的变化。
4 i=1 ; j=(++i)+(++i)+(++i); printf("J=%d\n",j); 这个结果是什么?没有结果,因为不同的编译器做出来的结果不同,我用vc6和gcc出来的结果是一样的,但是我坚信这么多不同编译器的优化规则都会导致这个怪异的结果。回过头来,这样coding,你会疯掉的,左手logic,右手biology千万别走火入魔!
5 我们来看看在++行为上表现迥异的c++程序和java程序
test.java
public class test{
public static void main(String args[]){
int i = 0 , j ;
for(j=0;j<5;j++){
i=i++; System.out.println("i="+i);
}
}
}
test.c
#include<stdio.h>
main(){
int i = 0 , j ;
for(j=0;j<5;j++){
i=i++ ; printf("i=%d\n",i);
}
}
test.java的结果是 i=0 i=0 i=0 i=0 i=0, test.c的结果是 i=1 i =2 i=3 i=4 i =5
为什么这样呢?其实不必太在乎啦,都是编译器惹的祸,java的编译器对于i = i++,相当于temp = i ; i = i+1 ; i = temp 所以现在我们明白了!而在C的编译机制里面i = i++ ,它只是做了i++这么一件事情!
int i = 0;
int array[] = {1,2,3,4,5};
printf("ths sum is %d",array[i++]);
取到的值是1,第一个元素,然后再i=i+1。
分享到:
相关推荐
使用++i和i++可以使迭代操作变得容易,但是两者到底区别在哪可以从这个程序中得知,使用java语言编写
浅谈 c i++ 与java i++的区别 c 代码: #include void main(){ int i=0;
C# 中i++和++i的区别,通过C#控制台应用程序清新查看
所以 a=++i 相当于 i=i+1 ,a=i 2、i++ 的用法(以 a=i++ ,i=2 为例) 先将 i 值赋给变量 a (也就是 a=i ),然后 i 值加 1 (也就是 i=i+1 ), 则最终 a 值等于 2 ,i 值等于 3 。 所以 a=i++ 相当于 a=i , i=i+...
你想要知道i++和i--的区别吗?你想了解i++和++i吗,还有你要了解i--和--i吗?都是可以的,关注我不定时发一些基础知识,这样可以更加的巩固你的知识的,以后的bug可以少写一点。
i++和++i的区别,能够看出i++表达式使用的是i自增前的值,而++i使用的是i自增以后的值
C语言中++i与i++的区别
先看看基本区别: i++ :先在i所在的表达式中使用i的当前值,后让i加1 ...再给大家详细说下++i 与 i++ 的区别 1、++i 的用法(以 a=++i ,i=2 为例) 先将 i 值加 1 (也就是 i=i+1 ),然后赋给变量 a (也就
c++的左值右值 i++与++i的区别.docx
主要介绍了Java中i++与++i的区别和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了JS for循环中i++ 和 ++i的区别介绍的相关资料,需要的朋友可以参考下
在内建数据类型的情况下,效率没有区别; 在自定义数据类型的情况下,++i效率更高! 分析: (自定义数据类型的情况下) ++i返回对象的引用; i++总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的...
主要介绍了java中的i++和++i的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
面试官:你说你懂i++跟++i的区别,那你知道下面这段代码的运行结果吗? 面试官:“说一说i++跟++i的区别” 我:“i++是先把i的值拿出来使用,然后再对i+1,++i是先对i+1,然后再去使用i” 面试官:“那你看看下面这段...
switch和if else的区别 1 switch 表达式的数据类型只能是byte short int char enum 7 0String if boolean型的表达式 else if boolean型的表达式 2 switch不能做范围判断 if else可以判断范围; 3 switch一旦进入...
下面小编就为大家带来一篇深入理解java中i++和++i的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
i被赋值0,i++(后++)并没有输出1。 现在i被赋值0,++i,也就是前++后输出了1。 i被赋值0,前++ 的话,就是自身先加1 就自身赋值变成1 ,后面的i的值都是1了。 i被赋值0,先是后++,后++意思是 自己先被...
RAID0+1及RAID1+0的安全差别,很多人总是搞不明白 ,好了,我来给大家详细说明一下