变量在声明之前使用是怎么回事?
how does it happened that a variable used before it's declared?
我对 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
不是一个函数,它是一个运算符。它在编译时 executed(准确地说是评估),因此 scope 或 lifetime 你正在考虑d
,这里不适用。它需要知道的只是 *d
的 type 并且在编译时已知。够了。
声明
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 *
,然后在单行中对其进行初始化。
你的假设是错误的,对象从=
开始初始化的标志开始存在。例如,在初始化程序中,您可以使用正在初始化的对象的地址。
这里,另外,不需要访问对象本身,sizeof
只使用这种情况下的类型。
我对 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
不是一个函数,它是一个运算符。它在编译时 executed(准确地说是评估),因此 scope 或 lifetime 你正在考虑d
,这里不适用。它需要知道的只是 *d
的 type 并且在编译时已知。够了。
声明
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 *
,然后在单行中对其进行初始化。
你的假设是错误的,对象从=
开始初始化的标志开始存在。例如,在初始化程序中,您可以使用正在初始化的对象的地址。
这里,另外,不需要访问对象本身,sizeof
只使用这种情况下的类型。