其实这是一个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条回答
jiutianshenjian
2019-07-22 10:39
回复【10楼】liuchang:
---------------------------------
a=(int *)p 是强制转换,跟本贴关系不大。

你的例子用变量来说是这样:
有个指针int *p1;你想给这个p1赋值(或是你说的初始化)。
你又int *p2;然后你使p1=p2;这就叫赋值了?
p1,p2都是未被初始化的指针,你怎么能拿p2去初始化p1?

你应该这样做:
int a;
int *p = &a;

这样p就被初始化了,有了具体的指向。

函数指针同理:
你想初始化void  (*init)(u8);
你就得定义一个void  abc(u8 c);
然后可以使init = &abc;
由于函数名本身就是函数的地址,所以就写成init = abc;就可以了.

一周热门 更多>