当我们用指针指向一个节点时,由于指针在链表中存储了下一个节点的地址(比如下一个节点的地址是216),那么下一个节点的数据是否与指针的地址相同?下一个节点的数据是在地址216??)(这里的数据是链表中的元素)?
考虑一个结构:
struct Node
{
int data;
struct Node *next;
};
,假设我们有一个struct Node x
,其中x->next
指向下一个节点,并且当前不是空指针。x->next
为下一个节点的地址。它也与下一个节点&x->next->data
:
- 它是相同的,因为它指向内存中的相同位置,因为开始从结构中的数据开始的位置开始。
- 不同是因为它有不同的类型。
x->next
的类型为struct Node *
,&x->next->data
的类型为int *
。这种差异是有意义的,因为C以不同的方式对待不同的类型,即使它们具有相同的"值"。
注意,短语"与指针的地址相同"是不清楚的,因为指针有两个地址:的地址指针本身就是指针在内存中的存储位置。例如,给定某个指针p
,&p
是名为p
的对象的地址。但是值指针的值是它指向的位置。在表达式中,p
是p
的值,所以它是p
指向的地址。我建议永远不要使用"指针的地址"来表示指针指向的位置。