gpt4 book ai didi

c - 指针操作和类型转换

转载 作者:太空宇宙 更新时间:2023-11-04 06:20:28 26 4
gpt4 key购买 nike

从 malloc 的自定义内存分配器,考虑这两个宏:

#define GET_HDR(bp) (*(int *)((int *)(bp) – 1))
#define GET_HDR(bp) (*(int *)((char **)(bp) – 1))

这里的bp是一个void指针。

GET_HDR(bp) 用于获取 HEADER 的内容,这是一个存储在 void 指针 bp 之前的 4 字节 block .这里第一个宏采用 void 指针 bp,将其类型转换为 int 并减去 1 以将指针取回 4 个字节,使其指向 HEADER block ,然后取消引用指针赋予 HEADER block 的值。

但是第二个宏是怎么做到的呢?如何操纵指针到达 HEADER block ?

最佳答案

宏可能假定 char * 的大小与 int 相同。

(
*(int *)( /* Treat result as pointer to int and dereference */
(char **)(bp) /* bp is cast to a pointer to (char *) */
– 1 /* take bp back sizeof(char *) bytes (presumably also 4) */
)
)

关于c - 指针操作和类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35977677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com