C语言和java两者数据的处理方式有什么区别吗?同样的代码结果却不同!
C语言:
#include<stdio.h>
int main()
{
int i=10;
i=i++;
printf("i=%d\n",i);
}

public static void main(String[] args) {
int i=10;
i=i++;
System.out.println("i="+i);
}
输出都是i=10啊
C语言中,i=i++是UB未定义行为,意味着这个表达式返回任何结果都是正确的。研究UB毫无意义,不要在这种东西上浪费时间。如果你们是学校考UB,那就不要再信任学校的教学水平了,自学吧。
参见: c++ - Is the behaviour of i = i++ really undefined? - Stack Overflow Possible Duplicate: Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…) According to c++ standard, i = 3; i = i++; will result in undefined behavior. We us... https://stackoverflow.com/questions/4968854/is-the-behaviour-of-i-i-really-undefined
Java中应该没有类似的UB,原因的话其他人已经解释了。
顺带一提,从C++17起,很多UB不再是UB了。但C中这个做法仍然是UB。
正确结果两个应该都是10,你的编辑器给你出的结果为11,是因为内部自动转化了,默认增加了1
计算机中的实际操作为:当执行i=i++;语句时,先把i放在一个临时内存空间中,然后将i自
加1,此时临时内存空间是一个i和一个1存放的就是(i+1),将临时内存空间中的i赋值给当前的i,因此结果还是原来的i的值
有趣的来了,你的软件环境认为你这是加一,所以临时空间存的不再是i+1,而是将他们进行运算后的结果进行存储,取出来的i就变成了(i+1),所以你的才会得到11
明白了吗?如有帮助,望采纳一下,谢谢啦
int i = 0;
i = i++;
//底层原理:
//int temp = i;--temp用于记录i最初的值
//i = (int)(i+1);
//i = temp
System.out.println(i);//0
解释:
首先将i++的值,即是0,进行储存,但由于=右边表达式未结束,暂时未赋值,随后执行++,i此时值为1,右边表达式才结束,通过=运算符给i赋值,又被重新覆盖为0.
————————————————