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:
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):