为了账号安全,请及时绑定邮箱和手机立即绑定

C语言函数指针的问题?

C语言函数指针的问题?

智慧大石 2019-02-10 13:09:12
如下typedef struct StateStruct {void (*FuncPtr)( void * ptr );}SS;这里void (*FuncPtr)和( void * ptr )这两个指针有什么关系吗,谁能帮我详细解释一下这个结构体的定义,谢谢 阿!
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

1234567typedef struct StateStruct {    void (*FuncPtr)( void * ptr ) f;}SS;    //定义了一个新的类型,这个类型是个结构体,类型名是SS//下面声明一个SS类型的变量SS s;//s就是一个SS类型的变量
1234567void (*FuncPtr)( void * ptr );//是一个类型名,类型是FuncPtr,这是一个函数指针类型,这个函数指针类型是返回值是void,接受一个void*的指针地址的参数。//一般使用typedef语法来用typedef void (*FuncPtr)( void * ptr );typedef struct StateStruct {    FuncPtr fp;}SS;

承上

123456void f(void *ptr){}//函数f就是一个funcPtr类型的函数。//可以以下面的方法赋值:s.fp = f;

 

1234const SS St_StateInit = { (void (*)(void *))State_Init };//用下面的写法会好看很多const SS St_StateInit = { (FuncPtr)State_Init };//这是用State_Init来初始化fp的值。


查看完整回答
反对 回复 2019-03-14
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

(*FuncPtr)说明FuncPtr是个指针,它指向有一个形式参数void * ptr的函数,这函数没有返回值。

查看完整回答
反对 回复 2019-03-14
?
白板的微信

TA贡献1883条经验 获得超3个赞

该结构体表示存储了一个形如void funcName(void *ptr)类型的函数指针(其实就是函数名了)。比如你有一个函数void test(void *ptr),同时有一个上述结构体SS newStruct,那么就可以有下面的操作newStruct.FuncPtr = test。这样一来如果执行 newStruct.Funcptr(ptr)就相当于执行了test函数,传递的参数是ptr。

查看完整回答
反对 回复 2019-03-14
  • 3 回答
  • 0 关注
  • 663 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信