5

我一直在考虑增加一个指针,但我想现在我一般不知道这两个操作/运算符之间的语义差异。例如,我的教授说如果你有 int a[10] 你不能说 a++ 来指向下一个元素,但我从经验中知道 a+1 确实有效。我问为什么,他说“a++ 是一个动作,a+1 是一个表达式”。他所说的“行动”是什么意思?如果有人能告诉我更多关于这一点以及这两种操作之间的内在差异,我将不胜感激。谢谢你。

4

6 回答 6

12

x++ 和 ++x

增量运算符x++将修改并通常返回旧的副本x。附带说明,前缀++x仍会修改x,但会返回新的x.

实际上x++可以看作是一种:

{
    int temp = x; 
    x = x + 1; 
    return temp;
}

++x将更像:

{
    x = x + 1;
    return x;
}

x + 1

x+1操作只会返回表达式的值,不会修改x. 它可以被视为:

{
    return (x + 1);
}
于 2013-03-19T18:35:04.943 回答
5

x++是一个动作,它改变了x

x+1不变x

于 2013-03-19T18:33:27.553 回答
2

x++是一个 const 表达式,它修改x(It 将其增加1) 的值。如果引用,则表达式将在递增之前x++返回 的值。x

表达式将在递增后++x返回 的值。x

x + 1但是,是表示 的值的表达式x + 1。它不会修改 的值x

于 2013-03-19T18:34:43.757 回答
2

a++ 将转换为 a=a+1 这是一个动作(由于包含的赋值操作) a+1 只是一个引用 a+1 的表达式(在指针术语或数字方面,取决于 a 的类型)

于 2013-03-19T18:35:22.997 回答
1

x++ 等价于 x = x + 1。这是一个动作,因为它实际上是在改变 x 的值。

于 2013-03-19T18:34:34.073 回答
0

每个表达式都会返回一个结果(除非它是void)。

x + 1返回 x + 1 的值。

x++返回 x 的值,作为副作用,x 的值在某个点递增,不一定立即递增。

这意味着您可以拥有:

x = x + 1;

但这是非法的:

x = x++;

于 2013-03-19T18:50:58.583 回答