c语言 - 链表中节点的地址和节点的数据是否相同



当我们用指针指向一个节点时,由于指针在链表中存储了下一个节点的地址(比如下一个节点的地址是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的对象的地址。但是指针的值是它指向的位置。在表达式中,pp的值,所以它是p指向的地址。我建议永远不要使用"指针的地址"来表示指针指向的位置。

最新更新