关于C语⾔中的结构体内嵌函数看门见⼭
1.内嵌函数定义举例:经过真实测试
在函数中声明定义
1#include "fun_in_struct.h"
2
3int main(int argc, char **argv) {
4 //定义结构体指针或者结构体变量,分别⽤->和.进⾏内部元素的使⽤
5 data_store_object *obj;
6 char *word;
7
8 /*⽅法⼀:直接定义结构体指针然后⽤->对结构体变量和函数进⾏初始化
9 word = "nihao";
10 obj = calloc(1,sizeof(data_store_object));
11 obj->word = word;
12 obj->count = 24;
13 obj->word_print = WordPrint;
14 obj->count_print = CountPrint;
15 obj->word_print(obj->word);
16 printf("%d\n",obj->count_print(obj->count));
17 return 0;
18 */
19
20 /*⽅法⼆:直接定义结构体变量然后直接进⾏初始化,⽤变量 = xxx;进⾏赋值
21 data_store_object obj = {
22 .word = "nihao",
23 .count = 12,
24 .word_print = WordPrint,
25 .count_print = CountPrint
26 };
27 obj.word_print(obj.word);
28 printf("%d\n",unt_unt));
c语言struct头文件29 return 0;
30 */
31
32 /*⽅法三:直接定义结构体变量,然后使⽤变量: xx进⾏赋值
33 data_store_object obj = {
34 word : "nihao",
35 count : 33,
36 word_print : WordPrint,
37 count_print : CountPrint
38 };
39 obj.word_print(obj.word);
40 printf("%d\n",unt_unt));
41 return 0;
42 */
43
在头⽂件中对结构体进⾏定义:
1typedef struct {
2 char *word;
3 int count;
4 void (*word_print)(char *word);
5 int (*count_print)(int count);
6}data_store_object;
7
8进⾏两个函数的声明,函数的定义发⽣在其他的源⽂件
9void WordPrint(char *word);
10int CountPrint(int count);
2.内嵌函数的个⼈理解
C语⾔的结构体内部是可以定义函数的,就像java中定义⽅法⼀样,我们在构建对象的时候不⽌是可以使⽤它的参数,还可以使⽤它内部关于数据的处理函数,java中叫做⽅法;但是C语⾔并不能实现类中⽅法的继承,重载,重写等特性,因此⽤的不是很多;
C语⾔是可以⾯向对象的,⾯向对象是⼀种思想,将事物和做事的过程定义成对象,只是C语⾔的语法让⾯向对象变得不那么好⽤。
C语⾔是要转化为汇编语⾔再转化为机器语⾔运⾏的,在汇编语⾔中存在着声明代码段的过程,将⼀段汇编指令之前加上⼀个标号,⽽这个标号就是函数的名称,我们所说的函数名实际上代表了⼀段构汇编指令的初始内存地址。那么变量可以附地址,函数也是可以的,有兴趣的可以看⼀下汇编语⾔和C语⾔混合编程,就理解了内嵌函数中出现的函数指针。
博⽂借鉴了其他⼈的博客,⽆意抄袭,侵删;顺便吐槽⼀下这个烂编辑器,真难⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论