中级会员
- 积分
- 321
- 金钱
- 321
- 注册时间
- 2014-10-29
- 在线时间
- 37 小时
|
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;
|
|