开发者

C语言中的结构体内嵌函数用法

目录
  • C语言的结构体内嵌函数
    • 1.内嵌函数定义举例:经过真实测试
    • 2.内嵌函数的个人理解
  • 结构体嵌套函数指针
    • 解释
  • 总结

    C语言的结构体内嵌函数

    看门见山

    1.内嵌函数定义举例:经过真实测试

    在函数中声明定义结构体

    #include "fun_in_struct.h"
    
    int main(int argc, char **argv) {
      //定义结构体指针或者结构体变量,分别用->和.进行内部元素的使用
      data_store_object *obj;
      char       *word;
    
      /*方法一:直接定义结构体指针然后用->对结构体变量和函数进行初始化
      word       = "nihao";
      obj       = calloc(1,sizeof(data_store_object));
      obj->word    = word;
      obj->count    = 24;
      obj->word_print = WordPrint;
      obj->count_print = CountPrint;
      obj->word_print(obj->word);
      printf("%d\n",obj->count_print(obj->count));
      return 0;
      */
      /*方法二:直接定义结构体变量然后直接进行初始化,用  变量 = xxx;进行赋值
      data_store_object obj = {
        .word = "nihao",
        .count = 12,
        .word_print = WordPrint,
        .count_p编程rint = CountPrint
      };
      obj.word_print(obj.word)javascript;
      printf("%d\n",obj.count_print(obj.count));
      return 0;
      */
      /*方法三:直接定义结构体变量,然后使用  变量 : xx进行赋值
      data_store_object obj = {
        word : "nihao",
        count : 33,
        word_print : WordPrint,
        count_print : CountPrint
      };
      obj.word_print(obj.word);
      printf("%d\n",obj.count_print(obj.count));
      return 0;
      */

    在头文件中对结构体进行定义:  

    typedef struct {
      char *word;
      int  count;
      void (*word_print)(char *word);
      int (*count_print)(int count);
    }data_store_object;

    进行两个函数的声明,函数的定义发生在其他的源文件

    void WordPrint(c开发者_开发培训har *word);
    int CountPrint(int count);

    2.内嵌函数的个人理解

    C语言的结构体内部是可以定义函数的,就像Java中定义方法一样,我们在构建对象的时候不止是可以使用它的参数,还可以使用它内部关于数据的处理函数,java中叫做方法;但是C语言并不能实现类中方法的继承,重载,重写等特性,因此用的不是很多;

    C语言是可以面向对象的,面向对象是一种思想,将事物和做事的过程定义成对象,只是C语言的语法让面向对象变得不那么好用。

    C语言是要转化为汇编语言再转化为机器语言运行的,在汇编语言中存在着声明代码段的过程,将一段汇编指令之前加上一个标号,而这个标号就是函数的名称,我们所说的函数名实际上代表了一段构汇编指令的初始内存地址。那么变量可以附地址,函数也是可以的,有兴趣的可以看一下汇编语言和C语言混合编程,就理解了内嵌函数中出现的函数指针。

    结构体嵌套函数指针

    这次来记录一下结构体嵌套函数指针

    这个知识点想了2天终于搞懂了。

    先看代码,试着理解一下,不理解再看我后面的解释。

    C语言中的结构体内嵌函数用法

    解释

    首先,和平常创建一个结构体一样,唯独不同的就是里面的变量是一个函数指针,关于函数指针的内容,原理,我这里就不多解释说明了,去搜一下都有很多。我们就简单的理解为:函数指针=指向函数地址的指针变量。

    所以这里的 void (*m_PrintInfo)();是一个变量,是一个变量,是一个变量(重要的事情说三遍)!

    typedef struct{
        char m_title[20];
        char m_author[20];
        int m_pages;
        void (*m_PrintInfo)();
    } BookType;

    这个变量是干嘛的呢?是用来存放函数的入口地址的,每个函数都是有入口地址的。

    BookType KEY[3]={
    	{"KEY1","Author1",5,ON_OFF_Pro},
    	{"KEY2","Author2",10,CAL_Pro},
    	{"KEY3","Author3",15,MENU_Pro},
    };

    这段代码,定义了3结构体数组,

    • 1.每个数组里面都有该结构体的成员
    • 2.每个数组里面都有该结构体的成员
    • 3.每个数组里面都有该结构体的成员(重要的事情说三遍)!

    也就是说,都有这些元素,这样好理解了吧。

    KEY[0].m_title                            KEY[1].m_title                         KEY[2].m_title

    KEY[0].m_author            &nandroidbsp;          KEY[1].m_author    &nandroidbsp;               KEY[2].m_author

    KEY[0].m_pages                       KEY[1].m_pages                  &http://www.devze.comnbsp;  KEY[2].m_pages

    好,那么我们来看下面的这行代码

    KEY[0].m_PrintInfo();

    那这里是调用了哪个函数呢?通过代码可以知道,是调用了ON_OFF_Pro这个函数。所以执行调用这个结构体成员变量的时候,会调用这个函数,因为一开始已经把函数的入口地址分配好了,只需要调用结构体成员变量就能够实现调用函数。

    C语言中的结构体内嵌函数用法

    -------------------------------------------------------- 分界线---------------------------------------------------------------

    下面来看看实际项目按键的用法

    C语言中的结构体内嵌函数用法

    C语言中的结构体内嵌函数用法

    总结

    以上所有内容均为自己笔记,仅让自己理解为主导!

    这些仅为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜