"The only operator that gives back a value is the de-referencing operator"
"The only operator that gives back a value is the de-referencing operator"
所以我是C的初学者。
当我在我的一份学习材料中遇到这个时,我正在阅读有关 l 值和 r 值的文本:
"关于赋值运算符=,我们讨论左值和右值。
唯一返回值的运算符是取消引用
运算符。"
这让我感到困惑,因为 increment/decrement 运算符不也给出一个值吗?那么如何取消引用唯一返回值的运算符?
我不同意这位作者。
所有运算符表达式,无论是一元、二元还是三元,都计算为一个值。
即使将我们限制在一元运算符,所有 10 似乎 "give a value back"(例如,表达式的计算结果为一个值):
&
- AddressOf: returns 变量的内存地址
*
- 取消引用:returns 存储在内存地址的值
!
- 逻辑非
~
- 二进制非
++x
- 前缀增量
x++
- 后缀增量
--x
- 前缀递减
x--
- 后缀递减
sizeof(x)
- 大小运算符 (但不是 运行 时间操作)
(type)(x)
- Cast 运算符将一种类型的值转换为另一种类型。
如果句子原意是:"The only operator which gives a l-value back is the dereferencing operator.",那么它更有意义,但仍然不完美和不精确:
示例:
y = x; // Simple Assignment
*y = x; // Assignment with dereference operator
y[5] = x; // Wait? Is this another operator forming an L-Value?
y.f = x; // Another one?
y->f = x; // The author was clearly wrong.
我认为这是一个错字,应该说
The only operator which gives an l-value back is the dereferencing operator.
这不完全正确。例如,[]
、.
和 ->
运算符也返回左值(标准拼写没有连字符),这样你就可以写
a[5] = 17;
s.x = 42;
p->y = 17;
所以我是C的初学者。 当我在我的一份学习材料中遇到这个时,我正在阅读有关 l 值和 r 值的文本:
"关于赋值运算符=,我们讨论左值和右值。 唯一返回值的运算符是取消引用 运算符。"
这让我感到困惑,因为 increment/decrement 运算符不也给出一个值吗?那么如何取消引用唯一返回值的运算符?
我不同意这位作者。
所有运算符表达式,无论是一元、二元还是三元,都计算为一个值。
即使将我们限制在一元运算符,所有 10 似乎 "give a value back"(例如,表达式的计算结果为一个值):
&
- AddressOf: returns 变量的内存地址
*
- 取消引用:returns 存储在内存地址的值
!
- 逻辑非
~
- 二进制非
++x
- 前缀增量
x++
- 后缀增量
--x
- 前缀递减
x--
- 后缀递减
sizeof(x)
- 大小运算符 (但不是 运行 时间操作)
(type)(x)
- Cast 运算符将一种类型的值转换为另一种类型。
如果句子原意是:"The only operator which gives a l-value back is the dereferencing operator.",那么它更有意义,但仍然不完美和不精确:
示例:
y = x; // Simple Assignment
*y = x; // Assignment with dereference operator
y[5] = x; // Wait? Is this another operator forming an L-Value?
y.f = x; // Another one?
y->f = x; // The author was clearly wrong.
我认为这是一个错字,应该说
The only operator which gives an l-value back is the dereferencing operator.
这不完全正确。例如,[]
、.
和 ->
运算符也返回左值(标准拼写没有连字符),这样你就可以写
a[5] = 17;
s.x = 42;
p->y = 17;