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

转载自:https://blog.csdn.net/qq_39490500/article/details/80457831

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

        在函数中声明定义结构体


 
 
  1. #include "fun_in_struct.h"
  2. int main( int argc, char **argv) {
  3. //定义结构体指针或者结构体变量,分别用->和.进行内部元素的使用
  4. data_store_object *obj;
  5. char   *word;
  6. /*方法一:直接定义结构体指针然后用->对结构体变量和函数进行初始化
  7. word = "nihao";
  8. obj  = calloc(1,sizeof(data_store_object));
  9. obj->word  = word;
  10. obj->count = 24;
  11. obj->word_print  = WordPrint;
  12. obj->count_print = CountPrint;
  13.   obj->word_print(obj->word);
  14. printf("%d\n",obj->count_print(obj->count));
  15. return 0;
  16. */
  17.   /*方法二:直接定义结构体变量然后直接进行初始化,用    变量 = xxx;进行赋值
  18. data_store_object obj = {
  19. .word  = "nihao",
  20. .count = 12,
  21. .word_print  = WordPrint,
  22. .count_print = CountPrint
  23. };
  24. obj.word_print(obj.word);
  25. printf( "%d\n",obj.count_print(obj.count));
  26. return 0;
  27. * /
  28. /*方法三:直接定义结构体变量,然后使用    变量 : xx进行赋值
  29. data_store_object obj = {
  30. word  : "nihao",
  31. count : 33,
  32. word_print  : WordPrint,
  33. count_print : CountPrint
  34. };
  35. obj.word_print(obj.word);
  36. printf( "%d\n",obj.count_print(obj.count));
  37. return 0;
  38. * /

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

  


 
 
  1. typedef 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. void WordPrint(char *word);
  9. int CountPrint(int count);

2.内嵌函数的个人理解

  • C语言的结构体内部是可以定义函数的,就像java中定义方法一样,我们在构建对象的时候不止是可以使用它的参数,还可以使用它内部关于数据的处理函数,java中叫做方法;但是C语言并不能实现类中方法的继承,重载,重写等特性,因此用的不是很多;
  • C语言是可以面向对象的,面向对象是一种思想,将事物和做事的过程定义成对象,只是C语言的语法让面向对象变得不那么好用。
  • C语言是要转化为汇编语言再转化为机器语言运行的,在汇编语言中存在着声明代码段的过程,将一段汇编指令之前加上一个标号,而这个标号就是函数的名称,我们所说的函数名实际上代表了一段构汇编指令的初始内存地址。那么变量可以附地址,函数也是可以的,有兴趣的可以看一下汇编语言和C语言混合编程,就理解了内嵌函数中出现的函数指针。

 

博文借鉴了其他人的博客,无意抄袭,侵删;顺便吐槽一下这个烂编辑器,真难用。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值