请问这两个宏是什么意思
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/11 23:15:35
请问这两个宏是什么意思
#define MALLOCREC_EX(t,n) (ALLOC_NO_ZMEM - sizeof(t) > ((n) & ALLOC_NO_ZMEM)) ((t*)MALLOC(sizeof(t)+(n))) :(t*)0
上面ALLOC_NO_ZMEM 值为0x800000001,大于号后问号前的部分 ((n) & ALLOC_NO_ZMEM)) 看不懂
#define AEEGETPVTBL(p,iname) (*((AEEVTBL(iname) **)((void *)p)))
这个为什么把p变为二级指针又变回一级指针,它跟下面的有区别吗?
#define AEEGETPVTBL(p,iname) (((AEEVTBL(iname) *)((void *)p)))
#define MALLOCREC_EX(t,n) (ALLOC_NO_ZMEM - sizeof(t) > ((n) & ALLOC_NO_ZMEM)) ((t*)MALLOC(sizeof(t)+(n))) :(t*)0
上面ALLOC_NO_ZMEM 值为0x800000001,大于号后问号前的部分 ((n) & ALLOC_NO_ZMEM)) 看不懂
#define AEEGETPVTBL(p,iname) (*((AEEVTBL(iname) **)((void *)p)))
这个为什么把p变为二级指针又变回一级指针,它跟下面的有区别吗?
#define AEEGETPVTBL(p,iname) (((AEEVTBL(iname) *)((void *)p)))
1. ALLOC_NO_ZMEM 的值按位取反之后与(n)的值按位与
2. 有区别,例如变量a的值为1,地址为0x0001,一级指针p指向变量a,即p的值为0x0001,*p的值为1,设p的地址为0x0002;二级指针pp指向p,即pp的值为0x0002,**pp的值为1,如果把二级指针变为一级指针,则pp指向的地址中的值为0x0002;即转换为一级指针之后,指针变量所指的内存地址已经变化
2. 有区别,例如变量a的值为1,地址为0x0001,一级指针p指向变量a,即p的值为0x0001,*p的值为1,设p的地址为0x0002;二级指针pp指向p,即pp的值为0x0002,**pp的值为1,如果把二级指针变为一级指针,则pp指向的地址中的值为0x0002;即转换为一级指针之后,指针变量所指的内存地址已经变化