链接列表何时使用 - >什么时候 。?

时间:2014-05-03 23:34:20

标签: c linked-list

让我们说一个名为Point的结构,包含x,y和next;我何时撰写P.y和何时P -> next因为此代码:

typedef struct
{
    int x, y;
    struct Point *next;
} Point;

我无法使用P -> next,也无法尝试if (P == NULL)

  1. 我可以组合使用P.xP -> next吗?
  2. 我什么时候必须使用 - >什么时候 。 ?

2 个答案:

答案 0 :(得分:3)

如果P的类型为Point,那么您始终使用.

 Point p;
 p.next;

如果P的类型为Point*,那么您始终使用->

 Point* p
 p->next;

如果你真的想在后一种情况下使用.,你必须先尊重。

Point *p;
(*p).next;

仅在后一种情况下,检查p == NULL是有意义的,因为指针可以是NULL,但结构通常不是。{/ p>


由于next本身被声明为指针,因此您应该使用->跟随指向下一个指针的指针。

Point p;
p.next->next; // Will only work if p.next is NOT NULL.

Point* p;
p->next->next; // Will only work if p->next is NOT NULL.

更新:要删除警告,请将声明更改为以下内容。

typedef struct Point
{
    int x, y;
    struct Point *next;
} Point;

问题是外部声明使用typedef而不是struct的标记,而内部使用struct Point。有关您为何会出现此行为的详细信息,请参阅this question

答案 1 :(得分:3)

P->next是指针类型P时使用Point*,当P.nextPoint类型的实际结构时使用{{1}}。