函数指针C中的结构

typedef struct Item{ int i; int j; void (*fooprint)(item*); }item; void fooprint(item *it){ printf("%d\n",it.i); } int main(){ item myitem; myitem.i=10; myitem.j=20; myitem.fooprint = fooprint; myitem.fooprint(&myitem); return 0; } 

此代码在void( footprint)(item )中给出错误。 “错误是预期’)””’令牌”之前。 我错过了什么吗? 当我这样做而不使用指针结构是有效的。 示例:void(* footprint)(item)

使用它时,类型item尚未知。 您可以通过前向声明来解决这个问题。

 typedef struct Item item; struct Item { int i; int j; void (*fooprint)(item*); }; 

另一种可能性是不使用typedef来定义成员:

 typedef struct Item { int i; int j; void (*fooprint)(struct Item *); } item; 

我不确定你为什么会遇到特定错误 – 我得到的错误是“错误:未知类型名称’项目’”。 这是因为typedef还没有“发生”,而且C不知道类型item引用的是什么。 使用struct Item代替那里的item

(另外, printf it.i应该是it->i )。