2014-11-04 91 views
2

我对链接列表中的节点具有以下结构。地址之间的C++差异

struct node { 
    int info; 
    nod *next; 
}; 

我已经声明p指向结构(节点)并初始化它。

node *p = new node; 

我不明白p&p之间的区别,他们是2个地址,但不应该他们有相同的地址?

cout<<p<<" "<<&p; 
+5

p - >节点地址,&p - >指向节点的指针地址。 – Borgleader 2014-11-04 13:09:01

+1

如果你走到一栋房子,它指示你去另一栋房子,你认为这两座房子是同一栋房子吗? – chris 2014-11-04 13:10:02

+1

&p表示包含其他地址的变量的地址。 – piotrekg2 2014-11-04 13:12:00

回答

-2

在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指向

4

让我们来看看这个有点不同:

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 

这是否使它更清晰一点?

1

所以,让我们有一个简单的例子来阐述这一点: -

int x = 4; 

通过这个4将存储在创建INT大小的内存。这块内存在程序中被命名为变量x。假设内存地址是ADDRESS_1。

int *ptr = &x; 

通过这一声明的内存另一块被创建以指针的大小(同为任何指针类型是否浮点数,字符串或某些用户定义的类型)。让我们说,内存地址是ADDRESS_2。这块内存将保存x的地址,例如ADDRESS_1。这就是指针的含义。

当你这样做

&ptr; 

这意味着你是指PTR的地址,该地址是在这种情况下ADDRESS_2。

它会给你ptr存储在内存中的地址。

希望事情会都清楚你只要指针的定义去...

2

我觉得Borgleader和Chris有解释,以最简单的方式,最好的想法。

首先你必须记住一个指针也是一个变量。所以,虽然int变量包含一个整数,但指针保存一个地址。和其他变量一样,它有自己的地址。

因此,当你这样做:

cout << p ... 

你在另一方面印刷的p(您刚刚创建的新节点的地址)的值

cout << &p ... 

将打印地址为p。有两个完全不同的地址。

1

考虑了一块假想内存的这个宏伟的艺术家再现执行node *p = new node;后:

4  5  6  7  8  ....  
...___________________________________ ... 
... |  |  |  |  |  | ... 
... |  | 8 |  | info next | ... 
... |  |  |  |  |  | ... 
...----------------------------------- ... 
       ^
       | 
       "p" 

有一个node开始在小区8号和单元号6(我们称之为“P”)包含数8.

换句话说,
p的值是8,这是node对象的地址,而
的值- 名为“p”的变量地址 - 为6.