【问题标题】:when we write void variable like void *p ; cout<<&p; cout<<p; so it give two different address but why?当我们编写像 void *p 这样的 void 变量时; cout<<&p; cout<<p;所以它给出了两个不同的地址,但为什么呢?
【发布时间】:2021-02-04 13:04:52
【问题描述】:

C++ 输出给出两个不同的地址 但是为什么编译器给出两个地址而不是我只写一个变量

void *p ;
cout<<&p<<p;

【问题讨论】:

  • 在这两行之间,输入p = &amp;p;,Bob 是你的叔叔。
  • 与int i; std::cout &lt;&lt; &amp;i &lt;&lt; i;基本相同。一个对象和它的地址是两个不同的东西,与对象的类型无关。

标签: c++ void-pointers


【解决方案1】:

p 是一个指针,它指向内存中的不同位置,您可以使用*p 访问该位置。
但是指针本身存储在某个地方,所以&amp;p 返回指针本身的地址。

【讨论】:

    【解决方案2】:

    void *p ; 是一个未初始化的指针。所以你将在指针里面有实际的垃圾。当您执行&amp;p 时,您将返回指针p 的地址。这就是为什么它们都返回不同的值。

    【讨论】:

    • 未定义的行为!= 垃圾
    • @largest_prime_is_463035818 我所说的“垃圾”是指存储在其中的实际数据,因为 OP 没有为其分配任何内容。
    • 你的意思是说初始化指针存储垃圾地址,就像初始化变量存储垃圾值一样?我是对的吗
    • @HT3163 不一定。当一个变量未初始化时,它可能包含不需要的值。当您初始化变量时,您将获得所需的值。但它并不严格。
    猜你喜欢
    • 2015-05-02
    • 1970-01-01
    • 2014-06-06
    • 2021-10-05
    • 2021-02-20
    • 1970-01-01
    • 2022-07-12
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多