c语言 - 链表 何时使用 -> 以及何时使用 .?



对于一个名为Point with x, y and next的结构;我什么时候写P.y,什么时候写P -> next,因为对于这段代码:

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

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

  1. P.xP -> next可以合并吗?
  2. 何时必须使用->和When。?

如果P的类型为Point,则始终使用.

 Point p;
 p.next;

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

 Point* p
 p->next;

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

Point *p;
(*p).next;

只有在后一种情况下,检查p == NULL才有意义,因为指针可以是NULL,而结构体通常不是。


由于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.

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

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

问题是外部声明使用typedef而不是struct的标签,而内部使用struct Point

P是指针类型Point*时使用P->next,当Point类型是实际结构体时使用P.next

相关内容

  • 没有找到相关文章

最新更新