【问题标题】:What's meaning of &&pointer or &*(pointer_to_pointer) in C++C++ 中 &&pointer 或 &*(pointer_to_pointer) 是什么意思
【发布时间】:2018-07-03 01:48:14
【问题描述】:
int *p;
int **pp;
int a = 9;
p = &a;
pp = &p;

cout << "&a: " << &a
cout << "&p: " << &p
cout << "&pp: " << &pp
cout << "pp : " << pp
cout << "*pp: " << *pp
cout << "&*pp: " << &*pp

&amp;&amp;p&amp;&amp;pp 没有在 c++ 中定义,所以它们使用错误,但 &amp;*pp 是什么意思? &amp;*pp 是否等于 &amp;&amp;a

程序启动时,结果如下:

&a:   00AEFAE4
&p:   00AEFAFC
&pp:  00AEFAF0
pp :  00AEFAFC
*pp:  00AEFAE4
&*pp: 00AEFAFC (=&p ???)

另一方面,为什么&amp;*pp 等于&amp;p

【问题讨论】:

  • C++提供模板,可以避免直接使用指针
  • 请发布您所询问的代码示例
  • 上下文太少,无法回答。请展开。什么代码生成你的输出? &amp;*pp 看起来您将 pp 取消引用到 p,然后再次有效地获取地址是 &amp;p,但如果没有更多信息则无法确定。
  • 代码很简单,我的问题是;为什么 &*pp 等于 &p?
  • 为什么不呢,因为*ppp

标签: c++ c++11 pointers visual-c++ c++14


【解决方案1】:

你问这里 &*pp 是什么意思 pp 是一个双指针,它包含指针 (*p) 的地址,通过编写 &*pp 首先你取消引用 **pp 的值

*(pp) 将成为 pp 内部的值,即指针 p 的地址 通过编写 &(*pp) 现在您正在尝试获取取消引用值的地址,即 (p 的地址) 最终将成为 p 的地址

简单来说,当您同时使用这两个运算符时,它们会相互抵消,并为您提供指针中存在的值 在这种情况下 &* 将被取消,您将获得 pp 的值,即 p 的地址 我尽量说清楚....希望对您有所帮助:)

【讨论】:

    猜你喜欢
    • 2013-03-09
    • 2015-11-16
    • 2019-09-12
    • 2016-12-08
    • 2011-07-07
    • 2016-04-19
    • 2015-04-11
    • 2012-04-25
    • 2011-08-25
    相关资源
    最近更新 更多