gpt4 book ai didi

c - 通过指针理解间接并获取地址

转载 作者:行者123 更新时间:2023-11-30 20:47:54 26 4
gpt4 key购买 nike

在标准中N1570第 6.5.3.2#3 节指定了以下内容(以我的为例):

If the operand is the result of a unary * operator, neither that operator nor the & operator is evaluated and the result is as if both were omitted, except that the constraints on the operators still apply and the result is not an lvalue.

稍后的 6.5.3.2#4 部分指定:

If the operand points to a function, the result is a function designator; if it points to an object, the result is an lvalue designating the object.

这两个部分在我看来是矛盾的。我引用的第一个指定结果不是左值,但第二个指定间接寻址运算符的结果是左值。

您能解释一下吗?这是否意味着在对象的情况下,运算符 *& 不会相互消除?

最佳答案

第 6.5.3.2#3 节讨论一元 & 运算符,第 6.5.3.2#4 节讨论一元 * 运算符。他们有不同的行为。

详细说明(from comment):

要点是,一元 & 不会产生左值,即使在被视为省略的情况下也是如此,因为它在取消引用上下文中紧邻一元 * 之前。仅仅因为两个运算符都被视为省略,并不能改变结果表达式不是左值的事实;如果应用单独的一元 & ,情况就不会如此。

int a; 
&a = ...;

(显然)是不合法的。但两者都不是

int a; 
&*a = ...;

仅仅因为它们被视为省略并不意味着 &* 左值等同于单独的 a

关于c - 通过指针理解间接并获取地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53755753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com