【问题标题】:Operator PlusPlus in C [duplicate]C中的运算符PlusPlus [重复]
【发布时间】:2016-05-02 18:51:37
【问题描述】:

据我所知,运算符 ++ 有两种情况的区别: x++和++x; 尽管, 当我尝试编写这样的代码时:

int x = 5;
int* y = &x;
int value;
value = *y++ + ++*y;

value 的值,是 12,在等式的末尾。 如果我将等式交换为

value = ++*y + *y++;

也是12,我不懂规矩。 他先做什么? 在两种情况下,y 指针指向垃圾。

谢谢, 乌利亚。

【问题讨论】:

标签: c operators


【解决方案1】:

此行导致未定义的行为:value = *y++ + ++*y;
*y++ 等价于*(y++),所以它递增指针,而不是实际值。
之后,++*y 取消引用 y 这会导致未定义的行为。

在第二个示例中,++*y 实际上增加了y 指向的值。
所以x 将是 6。之后 *y++ 取消引用 y 这也将给出 6。
这就是为什么在第二个示例中计算 12。
在之后取消引用y 也会导致未定义的行为,因此最好避免使用这样的代码。

【讨论】:

    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多