关于C语言中的结构体内嵌函数(转)

https://blog.csdn.net/qq_39490500/article/details/80457831

看门见山

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_print = CountPrint    };    obj.word_print(obj.word);    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(char *word);int  CountPrint(int count);

2.内嵌函数的个人理解

C语言的结构体内部是可以定义函数的,就像java中定义方法一样,我们在构建对象的时候不止是可以使用它的参数,还可以使用它内部关于数据的处理函数,java中叫做方法;但是C语言并不能实现类中方法的继承,重载,重写等特性,因此用的不是很多;  C语言是可以面向对象的,面向对象是一种思想,将事物和做事的过程定义成对象,只是C语言的语法让面向对象变得不那么好用。  C语言是要转化为汇编语言再转化为机器语言运行的,在汇编语言中存在着声明代码段的过程,将一段汇编指令之前加上一个标号,而这个标号就是函数的名称,我们所说的函数名实际上代表了一段构汇编指令的初始内存地址。那么变量可以附地址,函数也是可以的,有兴趣的可以看一下汇编语言和C语言混合编程,就理解了内嵌函数中出现的函数指针。 ———————————————— 版权声明:本文为CSDN博主「大熊c」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_39490500/article/details/80457831

posted on 2019-10-31 19:17  xihong  阅读(1198)  评论(0编辑  收藏  举报

导航