对于一个名为Point with x, y and next的结构;我什么时候写P.y
,什么时候写P -> next
,因为对于这段代码:
typedef struct
{
int x, y;
struct Point *next;
} Point;
我不能使用P -> next
,也不能尝试if (P == NULL)
。
-
P.x
和P -> next
可以合并吗? - 何时必须使用->和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
。