1结构体自引用
使用结构体遇到自引用问题,比入之前使用串口回调函数用到结构体自引用,使用代码如下:
struct Callbacklist
{
int hd;
P_Callback callbackfun;
char *pexitflag;
struct Callbacklist pnext;
};
编译显示错误,检查后发现这种声明方式,实际上是结构体里套结构体,无线循环下去。分配内存时,由于是无限嵌套,无法确定结构体长度,所以非法。这种情况应该使用指针来完成嵌套,因为在系统中指针的长度是确定的。
struct Callbacklist
{
int hd;
P_Callback callbackfun;
char *pexitflag;
struct Callbacklist *pnext;
};
编译成功。
查找资料时,发现另外一种嵌套方式:使用typedef来定义。方式多,结构灵活。(参考博客:http://www.cnblogs.com/renyuan/archive/2012/11/30/2796792.html)
typedef struct tag_1{ int value; struct tag_1 *link; } NODE; struct tag_2; typedef struct tag_2 NODE; struct tag_2{ int value; NODE *link; }; struct tag_3{ int value; struct tag_3 *link; }; typedef struct tag_3 NODE;