C语言中的结构体内嵌函数如何使用(c语言,开发技术)

时间:2024-04-29 08:29:10 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

C语言的结构体内嵌函数

看门见山

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

在函数中声明定义结构体

#include"fun_in_struct.h"intmain(intargc,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));return0;*//*方法二:直接定义结构体变量然后直接进行初始化,用变量=xxx;进行赋值data_store_objectobj={.word="nihao",.count=12,.word_print=WordPrint,.count_print=CountPrint};obj.word_print(obj.word);printf("%d\n",obj.count_print(obj.count));return0;*//*方法三:直接定义结构体变量,然后使用变量:xx进行赋值data_store_objectobj={word:"nihao",count:33,word_print:WordPrint,count_print:CountPrint};obj.word_print(obj.word);printf("%d\n",obj.count_print(obj.count));return0;*/

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

typedefstruct{char*word;intcount;void(*word_print)(char*word);int(*count_print)(intcount);}data_store_object;

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

voidWordPrint(char*word);intCountPrint(intcount);

2.内嵌函数的个人理解

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

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

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

结构体嵌套函数指针

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

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

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

C语言中的结构体内嵌函数如何使用

解释

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

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

typedefstruct{charm_title[20];charm_author[20];intm_pages;void(*m_PrintInfo)();}BookType;

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

BookTypeKEY[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 KEY[1].m_author KEY[2].m_author

KEY[0].m_pages KEY[1].m_pages KEY[2].m_pages

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

KEY[0].m_PrintInfo();

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

C语言中的结构体内嵌函数如何使用

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

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

C语言中的结构体内嵌函数如何使用

C语言中的结构体内嵌函数如何使用

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:C语言中的结构体内嵌函数如何使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:MyBatis注解式开发映射语句怎么使用下一篇:

11 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18