C结构与指针的功能?



谁能解释一下这个C语言结构里写了些什么?

struct Structure {
int i;
void (*function)(struct Structure*);    
} ;

这里有一个"工作示例";

#include <stdio.h>
struct Structure {
int i;
void (*function)(struct Structure *);
};
void foo(struct Structure *);
void bar(struct Structure *);
int main(void) {
struct Structure a = {0, foo};
struct Structure b = {42, NULL}; // don't call b.function() just yet!!
a.function(&b);
b.function(&a);
}
void foo(struct Structure *a) {
if (a->function == NULL) a->function = bar;
printf("value from foo: %dn", a->i);
}
void bar(struct Structure *a) {
printf("value from bar: %dn", a->i);
}

正如@jonathen-leffler在评论中所描述的,该结构有2个成员。结构体中的第一个成员保存一个整数值。第二个成员是一个函数指针,该函数接受一个"指向struct Structure的指针"的输入参数,不返回任何值。

因此,第二个成员可以指向如下声明的函数,
void someWork(struct Structure* someStruct)
{
//do some work on struct
someStruct->i = 5;
}

声明初始化这种类型的结构体,请按如下操作:

struct Structure myStruct;
myStruct.i=400;
myStruct.function = &someWork;

为了更容易地引用函数指针,可以使用typedef,如下所示:

typedef void (*func)(struct Structure*);
//assign it as
func = &someWork;

相关内容

  • 没有找到相关文章

最新更新