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