Union element alignment

The start of each element is aligned with the address of the union itself.

so the individual comparisons in the expression you ask about are true, but the expression as a whole is false unless the union is located at address 0x0001.

The deleted text applied to the following comparisons:

&u.l == &u.i == &u.s == &u.c[0]

The revised version compares distinct pointer types – the pointers should be cast to void pointers.


I was asked to quote the standard – or identify the section of the standard.

C99 – section 6.7.2.1 Structure and union specifiers (paragraph 14):

A pointer to a union object, suitably converted, points to each of its members (or if a member is a bitfield, then to the unit in which it resides), and vice versa.

Leave a Comment