【问题标题】:Which of these five statements about lvalues is true? [closed]这五个关于左值的陈述哪一个是正确的? [关闭]
【发布时间】:2013-01-17 03:15:51
【问题描述】:

我正在做以下谜题。也许有人可以检查我是否选择了正确的答案。 看看吧。

以下哪一项是关于左值的正确陈述?

1 左值是涉及 long int 类型数量的算术运算的结果。

2 所有左值都可以用在赋值语句的右侧。

3 根据定义,左值是出现在赋值最右侧的值 陈述。

4 根据定义,左值是指针间接引用的存储空间。

5 左值是能够出现在移位运算符左侧的任何数量。

好的,左值是对内存中对象的引用。因此,乍一看,我想到了第 4 个答案,但现在似乎不是正确的答案,因为 lvalue 不是存储本身(答案 4 暗示了这一点)。 # 我当时认为 答案 2 是正确的,因为左值可以用于赋值运算符的左侧和右侧。 你怎么看?

【问题讨论】:

  • 这看起来很像家庭作业......
  • #4 更直接的问题是,您根本不需要任何指针来使表达式成为左值。
  • @TylerJandreau 这有什么问题?这肯定是作业,但 OP 已经努力回答它,显然他回答正确,他只是要求确认。
  • @H2CO3 没有问题。这只是一个观察。 OP说他在做一个“谜题”,这让我觉得他/她试图隐藏问题的实际意图。我不介意回答作业,只需将其标记为这样。
  • @TylerJandreau 我明白了,感谢您的澄清。

标签: c variable-assignment operator-keyword lvalue rvalue


【解决方案1】:

我认为答案 2 是正确的,因为左值可以用于赋值运算符的左侧和右侧

是的,这是真的,正是出于这个原因。

其他语句的问题:

1) 左值是涉及 long int 类型数量的算术运算的结果。

没有。是否为long int 与左值没有任何关系。 (long int)42long int 类型,但它不是左值。

3) 根据定义,左值是出现在赋值语句最右侧的值。

没有。我不知道它有没有什么特殊的名字,但这肯定不是左值的定义。

4) 根据定义,左值是指针间接引用的存储空间。

没有。你不需要任何指针。与int i = 1337; 一样,i 是一个左值。但是,代码中没有任何指针。

5) 左值是能够出现在移位运算符左侧的任何数量。

没有。乍一看,左值更多地与以某种方式被修改的能力有关(分配给变量或数组成员),所以如果不是shift operator 它读为@987654327,这个陈述将更接近真实@。但是,并不是所有的左值都可以修改(比如常量是左值,但是初始化后就不能修改了)。

【讨论】:

  • 你最后描述的是一个可修改的左值。 const int i;i 不能出现在 = 运算符的左侧,但它是一个左值。左值是一个对象定位器。
  • Re: 4,register int i; i 是一个左值,即使你甚至不能获取它的地址(它没有地址)。 Re: 5,数组不能出现在=的LHS上,但它们也是左值。
  • @ouah True,会解决这个问题的。
  • @melpomene 是的,对。那是一个错误。我将删除错误的陈述。
猜你喜欢
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
相关资源
最近更新 更多