在C语言中识别Java,++i i++ 在C语言和java中的区别

在两种常用的语言中,最基本的运算符用法不一样,确实很容易混淆。

先看几段小程序运行结果

java中:

public class Test1 {

public static void main(String args[]){

int i=0,k;

k = ++i + ++i + ++i + i++;          // 讨论的 表达式

// i=++i + ++i + ++i + i++;

System.out.println("k= "+i);

System.out.println("i= "+i);

}

}

k=9   i=4

C语言中:

#include

void main()

{

int i=0,k=0;

k = ++i + ++i + ++i + i++;     //讨论的表达式

// i=++i + ++i + ++i + i++;

printf("k=%d, i=%d\n",k,i);

}

k=10  i=4

同样的表达式,也是最基本的运算符在不同的语言中结果不一致,很郁闷……我们来分析一下

在C语言中 ++i 返回的是应用类型 i++ 返回的是值类型 ,具体点说

k = ++i + ++i + ++i + i++;  相当于计算 k=(++i + ++i) + ++i + i++ 首先计算括弧里面的部分,执行第一个++i 这是i的值是1,到第二个++i 这是i变成了2,

括弧里面的式子是一个整体,前面的i会因为受到后面的影响变成2 所以相当于2+2,这是相当于k=(4+ ++i) + i++;括弧里的i变成3,式子变成k=4+3+i++;

i++先计算i,所以最后k=4+3+3=10  over~

在java中 后面即使是“引用”返回形式他也不会影响到前面,也就是说相当于上面分析过程第一个括弧(++i + ++i) 里面是1+2, 第一个++i 的值不会受到后面的影响,只能前面影响后面 ,相当于k = 1+2+3+3 =9  over~

下面我们再讨论个细节

如果将刚才讨论的表达式改成  i = ++i + ++i + ++i + i++ ; 打印i 的值

在java中 打印的结果还是 9  但是在C语言中结果有原来的10变成了11  ,为什么呢

java中 最后执行的是=  ,看下面一段代码就知道我的意思了

k=0;

while(i<10)

{

k=k++;

i++;

}

最后结果k还是0,执行过程是确定使用的k值0,k在自加,然后将之前的0赋给K,所以无论多少次循环值还是不变

在C语言中,= 不是最后执行的,它是先执行完等号,然后在加1,上面的代码第一次循环时 k=0赋给了k,然后k在自加,所以最后k为1,循环十次,k=10

OVER~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值