硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1459|回复: 4
收起左侧

关于函数指针的赋值问题

[复制链接]

10

主题

32

回帖

62

积分

初级会员

积分
62
发表于 2019-11-26 17:07:34 | 显示全部楼层 |阅读模式
大佬们,请问一下关于函数指针的用法,虽然在网上查了很多资料,但是还是有点迷迷糊糊
typedef struct
{
  unsigned char a;
  unsigned int   b;                           
  void (*fun)();      //函数指针
}TEST;


TEST    test[3]={
{   0,   0,    (*demo)     }  ,//赋值方式1
{   1,   1,    (&demo1)   }  ,//赋值方式2
{   2,   2,    demo          }  ,//赋值方式3
};

void main()
{
    (*test[0].fun)();  //执行函数
}
void demo(void)  //函数
{
    /*do something*/
}
请问赋值方式哪个是正确的?
执行函数是这种写法吗?
如能指点一二,不胜感激!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2019-11-26 18:03:15 | 显示全部楼层
QQ截图20191126180253.jpg
回复

使用道具 举报

10

主题

32

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2019-11-26 19:37:15 | 显示全部楼层
emm……这是3种方式都可以?这么神奇?
那执行函数也可以写成这3种方式?
*test[0].fun)();
&test[0].fun)();
test[0].fun)();
谢谢大佬指点
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2019-11-26 20:05:20 | 显示全部楼层
紫苑Yoo梦 发表于 2019-11-26 19:37
emm……这是3种方式都可以?这么神奇?
那执行函数也可以写成这3种方式?
*test[0].fun)();

我是test[0].fun测试的。
而这两个:
*test[0].fun)();
&test[0].fun)();
编译器不认识



回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2019-11-27 15:06:44 | 显示全部楼层
本帖最后由 caicaptain2 于 2019-11-27 15:08 编辑

赋值方式3感觉最好,简单明了。 函数名本身就是指针属性。

从理论上来看,赋值1和2都是错误的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 11:15 , Processed in 0.207303 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表