假设一个名为Point的结构具有x,y和next;我什么时候写P.y
,什么时候写,P -> next
因为这段代码:
typedef struct
{
int x, y;
struct Point *next;
} Point;
我无法使用,P -> next
也无法尝试if (P == NULL)
。
P.x
和P -> next
吗?如果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.
更新:要删除警告,请将声明更改为以下内容。
typedef struct Point
{
int x, y;
struct Point *next;
} Point;
问题是外部声明使用的是typedef
而不是struct
的标签,而内部声明使用的是struct Point
。有关为什么会出现此行为的详细信息,请参见此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句