gpt4 book ai didi

java - C 和 Java 中表达式++a,a,a-- 的输出

转载 作者:行者123 更新时间:2023-11-30 21:13:20 25 4
gpt4 key购买 nike

我正在评估代码并在 C 和 Java 中获得不同的输出。由于它是一个表达式,因此必须以两种语言生成相同的输出。但运行时却并非如此。

下面是代码示例和更多说明

C:

案例1:

    int a=101;
printf("%d,%d", ++a,a);

输出= 102,102

案例2:

   int a=101;
printf("%d,%d,%d", ++a,a,a--);

输出= 101,101,101

Java:

    int a=101;
System.out.print( ++a +"," + a + "," + a--);

输出= 102,102,102

对于第二种情况,我预计 C 语言(如 Java)的输出为 102,102,102。但输出是101,101,101

最佳答案

Since it's an expression,…

那是假的。正如您在 printf("%d,%d",++a,a); 中使用了 ++a,a 一样,它们是函数的两个单独的参数调用且不形成一个表达式。

Since it's an expression, so must generate same output in both the languages.

那是假的。 C 和 Java 对于表达式求值有不同的规则。

printf("%d,%d", ++a,a);

这违反了 C. C 2018 6.5 2 中的规则:

If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined…

printf("%d,%d",++a,a); 中,++ 运算符具有递增 a 的副作用,第二个a是使用a的值进行值计算。 C 的规则没有说明副作用和值计算将以什么​​顺序发生,因此它们相对于彼此是无序的。因此,该行为是未定义的。

关于java - C 和 Java 中表达式++a,a,a-- 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57020961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com