我对dictCreate()
实现的文件dict.c中的函数redis
感到困惑。我将在此处粘贴代码:
/* 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
?
答案 0 :(得分:7)
sizeof
不是函数,它是一个运算符。在编译时执行(精确评估),因此范围或生命周期您正在考虑{{1 },不适用于此处。它需要知道的是d
的类型,这在编译时是已知的。足够的。
答案 1 :(得分:1)
声明
dict *d = zmalloc(sizeof(*d));
相当于
dict *d;
d = zmalloc(sizeof(*d));
因此,dict *d
将d
声明为指向dict
类型和= zmalloc(sizeof(*d));
用于初始化的指针。 dict *d = zmalloc(sizeof(*d));
将d
声明为dict *
,然后将其初始化为单行。
答案 2 :(得分:1)
您的假设是错误的,该对象从开始初始化的<input type="text" class="form-control" name="contact-name" id="contact-name" placeholder="First & Last name" />
^^^^
This is missing for all form fields
符号开始存在。例如,在初始化程序中,您可以使用正在初始化的对象的地址。
此外,此处不需要访问对象本身,=
仅使用此类型的类型。