【问题标题】:Will "*&var" return the value stored in "var"?“*&var”会返回存储在“var”中的值吗?
【发布时间】:2014-08-31 09:11:07
【问题描述】:

如果:

int var = 0;
&var;   //--> returns the address of "var"

和:

int *p = &var;
*p;   //--> returns the value pointed to by "p", the value stored in "var"

那么不应该(尽管是多余的):

*&var;  //--> returns the value stored in "var"
*var;   //--> throw an error (or return the value stored in "var")?

我现在还没有办法编译C++代码,但是我想弄清楚这些运算符。

【问题讨论】:

  • 有免费的在线编译器,例如ideone 或 Coliru
  • 仅供参考,您可以使用在线编译器,例如this one
  • 现在可能有点太复杂了,但您可以稍后再回到这个。您可以重载地址运算符&。如果是这种情况,*&var 可能与 var 不同。我希望你永远不会遇到这种情况的代码。相关:stackoverflow.com/questions/6495977/…

标签: c++ pointers reference dereference


【解决方案1】:
*&var;  //--> returns the value stored in "var"

是的,&var 是指向var 的指针,那么*&varvar 相同。

*var;   //--> throw an error (or return the value stored in "var")?

这不会编译,因为你不能尊重 int

【讨论】:

  • 你只能取消引用地址值——有这样的事情吗?如果有,C++ 解释器如何“知道”一个值是“地址”类型的?如果没有,C++ 解释器如何不将指针与其他二进制信号混淆?可能是我写的?
  • 编译器“知道”,因为您将变量声明为指针类型,或者不是。当您声明 int* p 时,您是在对编译器说 p 属于“指向 int 的指针”类型。并且编译器只允许取消引用指针类型。
  • 既然是 C++,你绝对应该在这里写下引用。 *&var 产生一个对 var 的引用,而不是它的值,即 *&var = 17 将修改 var。
  • @Quentin *&var 是一个左值。但是我不确定这里的 reference 这个词,我的意思是,C 中没有引用,但是 *&var = 17; 也会修改 var
  • 它们在 C 中还没有被称为“引用”,并且确实不是可声明/可命名的,但它们已经在那里了。在任何情况下,问题都被标记为“C++”,而不是“C”:)
猜你喜欢
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
相关资源
最近更新 更多