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

时间:2021-10-26 04:02:01

关于C语言结构体内嵌函数

  • C语言的结构体内部是可以定义函数的,就像java中定义方法一样,我们在构建对象的时候不止是可以使用它的参数,还可以使用它内部关于数据的处理函数,只是java中叫做方法,但是这个方法中的特性是C语言不能实现的。
  • C语言是可以面向对象的,面向对象是一种思想,将事物和做事的过程定义成对象,只是C语言的语法让面向对象变得不那么好用。
  • C语言中的代码在运行时装入内存,可执行文件是存在外存的,内核为程序创建进程,分配内存,cpu资源,接口是代码运行的基础,程序是存在代码段和数据段的,因此函数实际上也是一段代码,也是存在存储的地址的,因此函数名就是指针,也可以将他赋给其他的函数型指针(void (*function )(int *); function = fun1;) ps:形参是可以不用写上形参名称的,只需要定义好类型;

那么示范一下如何定义结构体内部指针:经过真实测试

在函数中声明定义结构体

  1#include "fun_in_struct.h"

  2

  3int main(int argc, char **argv)

  4 {

 5     /*定义结构体指针或者结构体变量,分别用->和.进行内部元素的使用

 6     data_store_object *obj;

 7     char            *word;

 8        //方法一:直接定义结构体指针然后用->对结构体变量和函数进行初始化

 9     word = "nihao";

 10    obj  = calloc(1,sizeof(data_store_object));

 11    obj->word  = word;

 12    obj->count = 24;

 13

 14    obj->word_print  = WordPrint;

 15    obj->count_print = CountPrint;

 16

 17    obj->word_print(obj->word);

 18    printf("%d\n",obj->count_print(obj->count));

 19    return 0;

 20    */

 21

 22    /*方法二:直接定义结构体变量然后直接进行初始化,用    变量 = xxx;进行赋值

 23    data_store_object obj = {

 24        .word  = "nihao",

 25        .count = 12,

 26        .word_print  = WordPrint,

 27        .count_print = CountPrint

 28    };

 29

 30    obj.word_print(obj.word);

 31    printf("%d\n",obj.count_print(obj.count));

 32    return 0;

 33     */

 34

 35    /*方法三:直接定义结构体变量,然后使用    变量 : xx进行赋值

 36    data_store_object obj = {

 37        word  : "nihao",

 38        count : 33,

39         word_print  : WordPrint,

 40        count_print : CountPrint

 41    };

 42

 43    obj.word_print(obj.word);

 44    printf("%d\n",obj.count_print(obj.count));

 45    return 0;

 46    */

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

  6

  7typedef struct {

 8     char *word;

 9     int   count;

 10    void (*word_print)(char *word);

 11    int  (*count_print)(int count);

 12 }data_store_object;

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

14 void WordPrint(char *word);

15 int CountPrint(int count);


结构体函数真的好用吗?可以用,我们C语言是可以这样用的,至于好用吗?大熊我也不知道,纸上得来终觉浅,并不知道项目实践这方面是否会成为重点,博文借鉴了其他人的博客,无意抄袭,侵删。