下面代码中的
(*(const object_def_t **) obj) = def; 这一句是干嘛用的?
obj是一个指针,(const object_def_t**)obj是什么意思?
#define DECLARE_OBJECT \
const void* __def__; \
volatile long refCount
typedef struct object_header_s {
DECLARE_OBJECT;
} object_header_t;
object_t *object_new(const object_def_t *def) {
object_t *obj = malloc(def->size);
if (obj) {
(*(const object_def_t **) obj) = def;
OBJECT_HEADER(obj)->refCount = 1;
if (def->constructor){
obj=def->constructor(obj);
}
}
return obj;
}
object_t *obj = malloc(def->size);
这一句先给对象分配内存尺寸,并且用obj指针挂上,这时候obj指向一个新内存块的首地址
object -> | object space |
(const object_def_t **) obj
这时候相当于向编译器申明现在obj是一个指向一个 object_def_t * 指针变量的指针,如下图
object -> | (object_def_t *) var
| ... remaining object space |
注意到obj本身的值并没有进行修改,还是指向同一块分配的内存首地址
这时候对这个修改了类型进行 *obj = def,相当于把def所指向的内存地址赋予这块内存的第一个变量。
object -> | def | ... remaining object space |
|-> | def type object |
obj是双指针(指针的指针)
(const object_def_t **) obj
将它转换为双指针的类型
(*(const object_def_t **) obj) 求指针的值
这个值是一个指针
def也是一个指针
所以,将def这个指针赋值给(*(const object_def_t **) obj)