指针变量,var和& var的差异

时间:2017-03-25 23:26:19

标签: c++ pointers heap

#include <iostream>

using namespace std;

int main() {
    int* z = new int(9);

    cout << "address: " << z << endl;
    cout << "value: " << *z << endl;
    cout << "referance: " << &z << endl;
    return 0;
}

查看cout值,我期待地址和引用给出相同的地址,但是输出是什么:

address: 0x7fc452c032a0
value: 9
referance: 0x7fff5191b8d8

只是好奇这个原因,是普通值(z)堆中变量的地址值为9,其中var(&amp; z)是指针变量的地址,该变量位于堆栈?

这是一个可视化:

enter image description here

3 个答案:

答案 0 :(得分:3)

&z指定存储已分配地址int * z的指针new int(9)地址

指针z和值9存储在内存中的两个不同位置。

此处没有引用的概念,只有地址

答案 1 :(得分:1)

int* z;

上述语句意味着int类型声明的指针变量。

int* z = new int();

上述语句表示地址被动态分配给int类型的指针变量。

int* z = new int(9);

上述语句暗示值9存储在动态分配的。

cout << "address: " << z << endl;

上面的代码行告诉指针变量z的地址。

cout << "value: " << *z << endl;

上面的代码行告诉存储在变量z中的值。

cout << "referance: " << &z << endl;

上面的代码行告诉动态创建的变量的地址。

答案 2 :(得分:1)

首先让我先介绍一些基础知识。

  • 变量是一个名称,用于指代内存中的某个位置,该位置包含我们正在使用的值。

  • 使用&#39;&amp;&#39;在C / C ++中,我们可以得到变量的地址。

  • 指针是存储变量地址的变量。例如,在您所指的示例中

    int* z = new int(9);
    

    变量z存储值9的地址[new int(9)]。

现在,最后这个变量必须存储在内存中的某个位置,这可以使用和号(&amp;)进行访问。

    &z //gives the address of the pointer to value 9 (address of variable z).

这与指针(多级指针)的指针和指针的工作方式相同。