其实这是一个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条回答
liuchang
1楼-- · 2019-07-20 22:55
 精彩回答 2  元偷偷看……
小温
2楼-- · 2019-07-21 01:31
struct   _m_malloc_dev   malloc_dev;

void my_mem_init(u8 memx)
{
}

malloc_dev.init = my_mem_init;

函数名可以直接赋值给函数指针变量
liuchang
3楼-- · 2019-07-21 01:51
回复【2楼】小温:
---------------------------------
是啊,函数名可以直接赋值给函数指针变量,
那么如上的void  (*init)(u8) 函数直接将init换成my_mem_init,不就变成了 void (*my_mem_init)(u8)了嘛
jermy_z
4楼-- · 2019-07-21 03:18
回复【3楼】liuchang:
---------------------------------
结构体里  表明 此处是指针类型

函数名即是指针  

剩下的自己想吧
龙之谷
5楼-- · 2019-07-21 08:29
自己对指针也不是很熟悉,以下仅是当前认识,自己也不十分确认,欢迎讨论

void perused(u8);  //一般函数定义,perused为函数名(已固定)
void *perused(u8);  //返回(void *)指针函数,perused为函数名(已固定)
void (*perused)(u8);  //一般函数定义,perused为指向函数的指针,可被重新赋值

而函数名本身就是一个指针
jiutianshenjian
6楼-- · 2019-07-21 12:47
 精彩回答 2  元偷偷看……

一周热门 更多>