“唯一返回值的运算符是解引用运算符”

时间:2019-05-04 12:43:39

标签: c operators dereference unary-operator

所以我是C的初学者。 当我在其中一份学习资料中遇到有关l值和r值的文字时:

”“我们讨论关于赋值运算符=的l值和r值。 唯一返回值的运算符是取消引用 运算符。”

这使我感到困惑,因为递增/递减运算符也不提供值吗?那么,如何取消引用唯一返回值的运算符呢?

2 个答案:

答案 0 :(得分:3)

我认为这是一个错字,应该说

  

唯一返回 l值的运算符是解引用运算符。

这并非完全正确。例如,[].->运算符还返回左值(标准拼写,不带连字符),以便您可以编写

a[5] = 17;
s.x = 42;
p->y = 17;

答案 1 :(得分:1)

我不同意这个作者。

所有运算符表达式,无论是一元,二进制还是三进制,都将求值。

即使将自己限制为一元运算符,所有这些 ten 似乎也会“返还价值” (例如,表达式求值值):

&-AddressOf:返回变量的内存地址
*-取消引用:返回存储在内存地址中的值
!-不符合逻辑
~-不二进制
++x-前缀增量
x++-后缀增量
--x-前缀递减
x---后缀递减
sizeof(x)-大小运算符(但是不是运行时操作)
(type)(x)-类型转换运算符将一种类型的值转换为另一种类型。

如果该句子的意思是:“唯一提供 l值返回的运算符是解引用运算符。” ,这更有意义,但是仍然是不完美和不精确的:

示例:

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.