首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用/取消引用标识

引用/取消引用标识
EN

Stack Overflow用户
提问于 2012-03-06 04:14:06
回答 1查看 392关注 0票数 1

当x是一个L值(假设是一个变量)时,那么下面的恒等式成立:

X == *(&x)

这很容易解释,因为&x是指向x的指针,应用于&x的解引用运算符*当然会返回x。

现在我想知道反面是否有意义。准确地说,我想知道

P == &(*p)

当p是非悬空指针时。这似乎是有道理的,因为*p本身就是一个L值(一个有地址的值),因为我们已经有了指向它的指针(=adress) p。所以你只需要知道,这样的指针是唯一的,因为这样&(* p )就没有其他机会成为p了。

因此,当两个恒等式都为真时,你可以说,从数学上讲,*和&是彼此的反函数。

我说的对吗?这个所谓的规则有没有可能有例外?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-06 04:22:09

p是对象指针时,&*p等同于p*p的求值不会发生,这是由C标准保证的。

代码语言:javascript
复制
char *q, *p = NULL;
q = &*p;  // equivalent to q = p;

以下是标准的相关段落:

(C99,6.5.3.2p3)“如果操作数是一元*运算符的结果,则该运算符和&运算符都不会求值,结果就好像两者都被省略了一样,只是运算符上的约束仍然适用,并且结果不是左值。”

编辑指针:在@ldav1s注释之后,我将单词改为对象指针。实际上,如果p的类型是void *,那么&*p就是无效的。为了提供信息,C委员会已经在缺陷报告#102:http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_012.html中对此进行了讨论

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9573305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档