Ich bin verwirrt über eine Funktion dictCreate()
in Datei dict.c von redis
Implementierung. Ich werde den Code hier einfügen:Wie ist es vorgekommen, dass eine Variable verwendet wurde, bevor sie deklariert wurde?
/* 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;
}
Variable d
in zmalloc(sizeof(*d))
verwendet wird, aber theoretisch wird es existieren, wenn diese Zeile ausgeführt wurde. Also meine Frage ist, wie es möglich ist, Variable d
zu verwenden, bevor es erklärt wird?
'd' ist bereits deklariert: P. Sie können das sehen, wenn Sie die Deklaration zu "dict * d" umschreiben, was dasselbe bedeutet. –
Es verwendet seinen Typ, nicht den Wert. Der Typ ist in der Kompilierzeit bekannt, also kein Problem. –
Sehr nah an [Ist Dereferenzierung Nullzeiger gültig in Größe der Operation] (http://stackoverflow.com/q/19785518/1708801). –