OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 316|回复: 1

slab动态内存管理中关于void*的用法

[复制链接]

  离线 

15

主题

50

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
311
金钱
311
注册时间
2014-10-29
在线时间
34 小时
发表于 2018-5-29 08:29:42 | 显示全部楼层 |阅读模式
1金钱
问题描述:在动态内存管理slab.c文件中的
void rt_system_heap_init(void *begin_addr, void *end_addr)
{
        。。。
        在函数的尾部调用了:
        memusage = rt_page_alloc(limsize / RT_MM_PAGE_SIZE);
}
memusage 是一个静态全局指针变量:static  struct memusage  *memusage  =  RT_NULL;但是,函数void *rt_page_alloc(rt_size_t npages)的返回值类型为void *;
疑问:这里的赋值操作,不需要类型强制转换吗?struct memusage  *memusage  = void *
补充:在函数void *rt_page_alloc(rt_size_t npages)中有 return  b; b的类型为struct  rt_page_head *b ;这个可以理解:void *可以容纳所有类型的指针变量;
          void * 指针的用法:
                        1.        任何类型的指针都可以赋值给void*
                                example: void *p = int *q;
                        2      当void *的指针赋值给Type型指针时,需要进行强制转换;
                                   example : type *q = (type *)p;
                        3.        当再次取指针变量的地址时,即二级指针,还是可以赋值给void *的,但是不能够进行解引用;
                                   void *p = &q;

最佳答案

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

可以编译看编译器的报错结果
回复

使用道具 举报

  离线 

512

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
133765
金钱
133765
注册时间
2010-12-1
在线时间
1281 小时
发表于 2018-5-29 08:29:43 | 显示全部楼层
可以编译看编译器的报错结果
回复

使用道具 举报

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

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-21 09:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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