Я читаю реализацию алгоритма Томпсона для сопоставления регулярного выражения в C. Я видел этот фрагмент кода:
typedef union Ptrlist Ptrlist;
/*
* Since the out pointers in the list are always
* uninitialized, we use the pointers themselves
* as storage for the Ptrlists.
*/
union Ptrlist
{
Ptrlist *next;
State *s;
};
/* Create singleton list containing just outp. */
Ptrlist*
list1(State **outp)
{
Ptrlist *l;
l = (Ptrlist*)outp;
l->next = NULL;
return l;
}
Но, как я понимаю, в union
тип, все поля разделяют одну и ту же память.Итак, почему мы можем установить l->next=NULL
после приведения l=(Ptrlist*)outp;
, потому что, делая это, мы устанавливаем эту ячейку памяти в NULL
и l
станет NULL
?