#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)是指针变量的地址,该变量位于堆栈?
这是一个可视化:
是
答案 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).
这与指针(多级指针)的指针和指针的工作方式相同。