c语言 i++和++i什么区别?
对于变量i来说都会在原来基础上加1的,重点区别于式子本身的值;
1、i++式子值为i原来的值,就是通俗说的“先赋值再加1”;
2、而++i式子值为i变化后的值,也就是“先加1后赋值”;
在for循环中,如果要表示递增,两种都可以。
扩展资料:
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
参考资料:
c语言 i++和++i的区别:
1、i++式子值为i原来的值,就是通俗说的“先赋值再加1”;
2、而++i式子值为i变化后的值,也就是“先加1后赋值”。
而在for循环中,如果要表示递增,两种都可以。
扩展资料:
++属于C语言级别的单目/一元运算 3级:
++ unary-expression 前缀自增;
-- unary-expression 前缀自减;
unary-operator cast-expression 单目转型表式式, 包括 取地址& ,提领 * , 正号+ ,负号- 位反~ 逻辑否。
sizeof unary-expression 求类型长度,对表达式求类型长度。
sizeof ( type-name ) 求类型长度。
参考资料:百度百科—C语言运算符
1、i++是先对i操作,再对i执行+1;++i是先运行+1,将值赋给i后,再对i操作。
2、独立使用时二者效果一样。在表达式中i++取i的值参与运算,而++i取i+1的值参与运算。在表达式中++i可以做左值使用i++则不能,所以++i是“左值表达式”而i++不是。
比如:
int i=1;
(1)、用i++时:int a=1+ i++; //运行过程是1+1,然后再将结果2赋给a,最后是i=i+1。
(2)、用++i时:int a=1+ ++i; //运行过程是先运行i=i+1,得到2,然后运行1+i,并将结果1+i赋给a。
扩展资料:
1、"++"是C和C++还有JAVA等高级语言里的自增运算符,使可变左值(如变量,迭代器变量等)加一。用法主要有两种:i++;++i;。
2、"++"是C和C++里的自增运算符。其中:++i是使用i之前先使i加一。i++是使用i之后再加一。如果不能理解,那么可以理解为:++i是先计算,再操作,i++是先操作,再计算。JAVA里的自增运算符。
3、其中:++i和i++是谁在前先取谁,但加一优先运算并赋给原值,取的值再参与其他运算。
参考资料:百度百科:++
i++和++i都是c语言里的自增,但是它们自增的顺序不同。++i表示,i自增1后再参与其它运算,而i++ 则是i参与运算后,i的值再自增1。
for循环里循环变量增值用i++,而不用++i是因为在循环结构里需要循环变量来结束循环,而使用i++则会导致本来应该继续的循环少执行一次,所以循环结构里通常都是循环变量在一次循环结构执行完成之后再自增。
扩展资料
i++和++i前置后置区别的例子:
1、a = i++;
相当于 a = i; i++;
2、a = ++i;
相当于 i++; a = i;
3、int i=3;
int j=4;
int a = i++;
int b = ++j;
printf("%d, %d\n", a, b);
结果是3,5。++前置:i自增1后再参与其它运算;++后置:i参与运算后,i的值再自增1”。很明显,a = i++;由于是先执行赋值运算,再自增,所以结果是a=3,i=4;而b = ++j。
参考资料来源百度百科——自增自减运算符
i++是先赋值,然后再自增;++i是先自增,后赋值。
用代码表示就是:
若 a = i++; 则等价于 a=i;i=i+1;
而 a = ++i; 则等价于 i=i+1;a=i;
那么事实真是这样么,只是曾经我深信不疑,但是直到我看到下面这段代码:
@Test
public void test(){
int i = 0;
i=i++;
System.out.println(i);
}
如果按原先定义,就应该是i=i;i=i+1; 那么结果就应该是1;但是很遗憾结果是0;所以得知原先定义有误,至少是不准确的。
那么真实的机制是怎么样的呢?我简单用代码模拟如下真实流程:
int i;
@Test
public void testAddI() {
i = 0;
i = lastAdd();
System.out.println(i);
i = 0;
i = firstAdd();
System.out.println(i);
}
//模拟i++的机制
public int lastAdd() {
//操作i前对其值保留副本
int temp = i;
i = i + 1;
//返回副本
return temp;
}
//模拟++i的机制
public int firstAdd() {
i = i + 1;
return i;
}
输出结果为0和1,和i=i++以及i=++i的结果一致。
结论:在java的执行过程中,i++和++i都直接对i进行了i=i+1的操作,但是不同的是i++得到的是i未进行加法操作的前的值的副本,而++i直接得到计算后的值
输出结果为:i=1,i=2,i=3,i=3
分析:++i,执行过程先把i的值执行i=i+1,此时i=1再进行判断,所有while(1)条件为真,然后在执行循环体,输出i=1回车换行,if不成立,继续循环;
当i=1时,再判断循环条件++i,还是先执行i=i+1,此时i=2; while(2) 条件为真,然后再做循环体,此时输出 i=2回车换行;if不成立,继续循环;
当i=2时,再判断循环条件++i,还是先执行i=i+1,此时i=3; while(3) 条件为真,然后再做循环体,此时输出 i=3回车换行;if成立,强制推出循环;
最后输出i=3,结束。
这里需要注意的是:
a、break语句表示强制从循环体内跳出,提前结束循环。
b、while(1)、while(2)、while(3)都表示条件为真,也就是说非0的数都表示真。
【小结】
越是简单基础的知识,越需要常常回顾,多多积累