Union element alignment

吃可爱长大的小学妹 提交于 2019-11-26 14:44:36

问题


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

回答1:


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.



来源:https://stackoverflow.com/questions/891471/union-element-alignment

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!