我对结构定义和指针有疑问。
在链表节点结构的定义中,我们将结构定义如下:
typedef struct node
{
int data;
struct node *next;
}Node;
我们为什么要使用这种声明方式代替:
typedef struct node
{
int data;
struct node next; //changed this line
}Node;
提前致谢!
在其右大括号之后定义一个结构。直到结构具有不完整的类型。但是,结构的定义要求除灵活数组之外的所有其他成员都应具有完整的类型。
所以在这个声明中
typedef struct node
{
int data;
struct node next; //changed this line
}Node;
数据成员的下一个类型不完整。
来自C标准(6.7.2.1结构和联合规范)
- ...类型是不完整的,直到紧接终止列表的}之后,然后才完成。
和
3结构或联合不得包含具有不完整或函数类型的成员(因此,结构不得包含自身的实例,但可以包含指向自身实例的指针),但结构的最后一个成员具有更多的一个命名成员可能具有不完整的数组类型;这样的结构(以及可能包含递归关系的任何并集的任何并集)都不应该是结构的成员或数组的元素。
至于指针,则它们始终具有完整的类型,因为它们的大小是已知的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句