为什么C和Java的输出不同

为什么C和Java的输出不同,java,arrays,c,Java,Arrays,C,在main()i massingarr[n]=++n中是这样的 因此,在C中,当n=0时,它进入内部,而这一行中的ndarr[n]=++n我们正确地开始frm,所以n变成n=1,所以arr[1]=1但是arr[0]=垃圾值 在C语言中,输出是 垃圾值1 2 3 4 5 6 7 C代码: #包括 int main() {int arr[8];//大小为8的数组 int n=0; 而(narr[n]=++n;在C中是未定义的行为,因为序列点的概念。虽然我在C中找不到一个好的副本(我知道C++中有一

main()
i massing
arr[n]=++n中是这样的
因此,在C中,当n=0时,它进入内部,而这一行中的nd
arr[n]=++n
我们正确地开始frm,所以n变成n=1,所以
arr[1]=1
但是
arr[0]=垃圾值

在C语言中,输出是

垃圾值1 2 3 4 5 6 7
C代码:

#包括
int main()
{int arr[8];//大小为8的数组
int n=0;

而(n
arr[n]=++n;
在C中是未定义的行为,因为序列点的概念。虽然我在C中找不到一个好的副本(我知道C++中有一个),但它肯定会存在。arr[n]=++n;这是C中的序列问题;我当然知道这个问题(或一些非常接近它的问题)定期询问。将递增与赋值分开,例如
arr[n]=++n;
with
arr[n]=n+1;++n;
与Java不同,C不保证表达式的计算顺序固定-表达式的计算
a[n]
++n
是相对不排序的,可以按任何顺序进行(即使平台支持它也可以同时进行)。此外,
++n
的副作用不必在评估后立即应用。这意味着
a[n]的结果=++n
可能因编译器或周围的代码而异。C语言定义未定义此表达式的行为-任何结果都是可疑的,即使它是您期望的结果。