其实这是一个C语言函数指针相关的问题,这个问题在我脑子里一直盘旋了很久,恳请大神解答我心中的疑惑~

2019-07-20 21:00发布

例如我现在看的原子哥的内存管理实验(探索者开发板)
其中有如下的一个结构体

1>这是该实验中的一个结构体
[mw_shl_code=c,true]struct _m_malloc_dev { void (*init)(u8); /* 就以这个来说明吧 */ u8 (*perused)(u8); u8 *membase[SRAMBANK]; u16 *memmap[SRAMBANK]; u8 memdry[SRAMBANK]; };[/mw_shl_code]

2>以其中第一个成员为例,我们对这个函数指针进行初始化, 初始化结构体指针为my_mem_init

3>于是:我们就需要定义如下一个函数
void my_mem_init(u8 memx)
{
}
请问大神:按照前面的函数指针定义:我觉的这个函数应该采用如下形式
void (*my_mem_init)(u8 memx)
{
}
是我哪里理解错了,恳请大神指教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
小温
1楼-- · 2019-07-21 16:43
 精彩回答 2  元偷偷看……
龙之谷
2楼-- · 2019-07-21 22:35
回复【6楼】jiutianshenjian:
---------------------------------
如果直接void  init(u8);和void  (*init)(u8);有什么区别呢?直接void  init(u8);时init是什么含义,进行void f(u8 a);类函数赋值是否可以?
liuchang
3楼-- · 2019-07-21 23:19
回复【9楼】龙之谷:
---------------------------------
按照我现在的理解:例如我们定义指针p,是采用如下方式 
int *p,
而我们在使用这个指针的时候,却不用加修饰,a=p(而不是写成a=(int *)p
这也就是为什么我们使用void my_mem_init(u8)(而不是(*my_mem_init)(u8)的原因了吧)
liuchang
4楼-- · 2019-07-21 23:37
还请各位大神看看小弟理解的是不是有问题~
龙之谷
5楼-- · 2019-07-22 04:23
 精彩回答 2  元偷偷看……
jiutianshenjian
6楼-- · 2019-07-22 06:02
回复【9楼】龙之谷:
---------------------------------
函数名是函数的地址是个常量。
函数指针是变量,可以被赋值。

一周热门 更多>