• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

结构体和指针的结合

瞎折腾 2016-09-07 浏览量:898
一直没弄明白结构体和指针的是使用方法,最近写多级菜单,参考了别人的程序,但是不能理解希望能有大神详细的解释一下!不胜感激。
void (*current_operation_index)();
uchar func_index=0;
uchar func_index;

typedef struct
{
uchar current;
uchar up;
uchar down;
uchar enter;
void (*current_operation)();
} key_table;


1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 本帖最后由 LiuYang 于 2016-9-7 10:12 编辑

    结构里增加了一个处理菜单项动作的函数,其实就是相当于创建了一个菜单的类便于复用。根据传入的指针来判断当前这个类对应的是哪个菜单,然后这个函数具体实现这个菜单的功能。
    这样写的好处是,因为每个菜单大部分的属性是相同的,所以可以归纳到一起减少代码量,而不必为每一个菜单用不同函数名的函数来设置相同部分的东西;不同的部分就是执行的动作,靠外部传入的函数来实现,做到界面代码和业务逻辑代码的分离,减少耦合度。
    上面这段代码的调用方法是,实例化这个结构体,初始化时将属性赋值,并将这个菜单的功能函数的指针保存到这个void中。由于代码不全,后面的代码可以看到有调用这个函数的地方,其实就是个回调,可以不用关心了。
    • 发布于 2016-09-07
    • 举报
    • 评论 0
    • 3
    • 0

其他答案 数量:6

  • 这种用法,一般是在结构体中增加一个(几个)指针,将指针赋值某函数,以运行此函数进行刷屏或是按键操作。
    key_table=

    1,
    2,
    3,
    4,
    5,
    menukey_function
    };

    其中menukey_function就是函数名。
    • 发布于2016-09-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 声明了一个函数指针 void (*current_operation_index)(); 指向一个函数的地址
    结构体中的函数指针是声明中的一个
    • 发布于2016-09-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以参考版主分享的51开发板第8讲
    • 发布于2016-09-08
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

结构体和指针的结合