我对链接列表中的节点具有以下结构。地址之间的C++差异
struct node {
int info;
nod *next;
};
我已经声明p指向结构(节点)并初始化它。
node *p = new node;
我不明白p
和&p
之间的区别,他们是2个地址,但不应该他们有相同的地址?
cout<<p<<" "<<&p;
我对链接列表中的节点具有以下结构。地址之间的C++差异
struct node {
int info;
nod *next;
};
我已经声明p指向结构(节点)并初始化它。
node *p = new node;
我不明白p
和&p
之间的区别,他们是2个地址,但不应该他们有相同的地址?
cout<<p<<" "<<&p;
在C语言中,如果你想给一个变量给他写信或更好++你poiner使用前&说:让他们在事业ADRESS指针&点给出了var的ADRESS。
int i = 0;
int* pointer = &i;
如果你想使用变量的常量,指针指向你用*来表示。
int y = *i;
basicly p是该节点的指针和& p是该节点的指针的ADRESS。
p具有其自身的ADRESS,在exampel如果你想有一个其他指针第2-11页的指向你做富secondpointer的节点上= & p指向
让我们来看看这个有点不同:
struct node {
int info;
node *next;
};
node n; // the node itself
node* p = &n; // p is a "node pointer" (node*)
// its value holds the address of (node) n
node** pp = &p; // pp is a pointer to a "node pointer" (node**)
// its value holds the address of (node*) p
这是否使它更清晰一点?
所以,让我们有一个简单的例子来阐述这一点: -
int x = 4;
通过这个4将存储在创建INT大小的内存。这块内存在程序中被命名为变量x。假设内存地址是ADDRESS_1。
int *ptr = &x;
通过这一声明的内存另一块被创建以指针的大小(同为任何指针类型是否浮点数,字符串或某些用户定义的类型)。让我们说,内存地址是ADDRESS_2。这块内存将保存x的地址,例如ADDRESS_1。这就是指针的含义。
当你这样做
&ptr;
这意味着你是指PTR的地址,该地址是在这种情况下ADDRESS_2。
它会给你ptr存储在内存中的地址。
希望事情会都清楚你只要指针的定义去...
我觉得Borgleader和Chris有解释,以最简单的方式,最好的想法。
首先你必须记住一个指针也是一个变量。所以,虽然int
变量包含一个整数,但指针保存一个地址。和其他变量一样,它有自己的地址。
因此,当你这样做:
cout << p ...
你在另一方面印刷的p
(您刚刚创建的新节点的地址)的值
cout << &p ...
将打印地址为p
。有两个完全不同的地址。
考虑了一块假想内存的这个宏伟的艺术家再现执行node *p = new node;
后:
4 5 6 7 8 ....
...___________________________________ ...
... | | | | | | ...
... | | 8 | | info next | ...
... | | | | | | ...
...----------------------------------- ...
^
|
"p"
有一个node
开始在小区8号和单元号6(我们称之为“P”)包含数8.
换句话说,
的p
的值是8,这是node
对象的地址,而
的值- 名为“p”的变量地址 - 为6.
p - >节点地址,&p - >指向节点的指针地址。 – Borgleader 2014-11-04 13:09:01
如果你走到一栋房子,它指示你去另一栋房子,你认为这两座房子是同一栋房子吗? – chris 2014-11-04 13:10:02
&p表示包含其他地址的变量的地址。 – piotrekg2 2014-11-04 13:12:00