我对redis实现的文件dict.c中的函数dictCreate()感到困惑.我要在这里粘贴代码:
/* Create a new hash table * T = O(1) */ dict *dictCreate(dictType *type,void *privDataPtr) { dict *d = zmalloc(sizeof(*d)); _dictInit(d,type,privDataPtr); return d; }
变量d用于zmalloc(sizeof(* d)),但理论上它在执行此行时将存在.所以我的问题是如何在声明之前使用变量d?
解决方法
sizeof不是函数,它是一个运算符.它在编译时执行(精确评估),因此您考虑的范围或生命周期d不适用于此处.它需要知道的是* d的类型,并且在编译时已知.足够.