函数指针C中的结构

Pav*_*van 1 c pointers structure function

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*iss 7

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

typedef struct Item item;
struct Item {
    int i;
    int j;
    void (*fooprint)(item*);
};
Run Code Online (Sandbox Code Playgroud)

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

typedef struct Item {
    int i;
    int j;
    void (*fooprint)(struct Item *);
} item;
Run Code Online (Sandbox Code Playgroud)


Ale*_*lec 5

我不确定你为什么会遇到特定错误 - 我得到的错误是"错误:未知类型名称'项目'".这是因为typedef还没有"发生",而且C不知道类型item所指的是什么.用来struct Item代替item那里.

(另外,it.iprintfit->i).

  • +1代码编译并运行这两个更改. (2认同)