If I have a union, C standard guarantees that the union itself will be aligned to the size of the largest element.
union U {
long l;
int i;
short s;
char c[2];
} u;
But what does it say about alignment of individual union elements inside the union? Is the following expression guaranteed to be true?
(&u.l == &u.i) && (&u.i == &u.s) && (&u.s == &u.c[0])
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.