C指针问题,(const object_def_t**)obj原理

下面代码中的
(*(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)