关于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小时内删除。