OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7077|回复: 3

结构体里面初始化函数是怎么用的?

[复制链接]

24

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
金钱
219
注册时间
2014-1-7
在线时间
16 小时
发表于 2015-5-13 15:38:27 | 显示全部楼层 |阅读模式
5金钱
.h文件申明结构体类型
typedef struct
{
void (*Init)(void);
LONG (*ReadAddr)(UINT uAddr);
void (*WriteAddr)(UINT uAddr, LONG lData);
}CEEprom;

在对应的.c文件中定义
// 宏定义
#define EEPROM_DEFAULTS { \
CEEprom_Init, \
CEEprom_ReadAddr, \
CEEprom_WriteAddr \
}
-----------------------------------------------------------------------------------

 全局变量声明
CEEprom EEprom = EEPROM_DEFAULTS;
-----------------------------------------------------------------------------------
CEEprom EEPROM=
{
CEEprom_Init,
 CEEprom_ReadAddr,
 CEEprom_WriteAddr 
};

这个地方看不明白,结构体里面如果有变量我初始化可以理解,结构体里面是函数初始化怎么理解?还有每个函数后面“\”是干什么用的,去掉在keil中就会报错,这是哪地方的用法?我只对C语言比较了解,这个哪地方有讲解?

最佳答案

查看完整内容[请看2#楼]

首先函数名也是个指针,指针变量要初始化(如果没有初始化程序里就要为指针分配内存),定义了一个指向函数的指针变量,就要给这个变量初始化,放上你想要的函数名就可以了,实际上是把这个函数封装起来,就是模拟了c++的面向对象的机制c语言的结构体代表了一个类,类里有各种成员变量和成员函数。但无论是c还是c++结构体里都不允许放函数,但是我在结构体里声明可以指向函数的指针变量你管不着吧,初始化的把你想要的函数名赋给这 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2014-8-4
在线时间
14 小时
发表于 2015-5-13 15:38:28 | 显示全部楼层
首先函数名也是个指针,指针变量要初始化(如果没有初始化程序里就要为指针分配内存),定义了一个指向函数的指针变量,就要给这个变量初始化,放上你想要的函数名就可以了,实际上是把这个函数封装起来,就是模拟了c++的面向对象的机制c语言的结构体代表了一个类,类里有各种成员变量和成员函数。但无论是c还是c++结构体里都不允许放函数,但是我在结构体里声明可以指向函数的指针变量你管不着吧,初始化的把你想要的函数名赋给这个指针就可以了,想用的时候有结构体->或者.这个函数就可以了。
"\"这个符号代码你这行的代码没有写完下一行还要接着继续写这一行的代码,但是在"\"的这一行"\"符号的后面不能再有任何内容
生命不息,学习不止
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-5-13 18:57:56 | 显示全部楼层
“\”是链接符,说明本行代码和下一行代码是连在一起的
开往春天的手扶拖拉机
回复

使用道具 举报

24

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
金钱
219
注册时间
2014-1-7
在线时间
16 小时
 楼主| 发表于 2015-5-14 13:33:03 | 显示全部楼层
谢谢,c语言书中有,属于函数指针,以前上课的时候很少用,学习了,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 15:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表