c - sizeof union 总是其中最大数据类型的 sizeof 吗?

标签 c

<分区>

我尝试了一个简单的代码来查看我创建的 union 的大小,它说大小是 52 而不是 50。我尝试使用另一个相同大小的字符串,它像平常一样给出 50。额外的 2 个字节来自哪里?

这里是代码

union Name
{
    int y;
    float x;
    char name[50];
}name;

int main(int argv, char *argc[])
{
char name2[50];
printf("%d",sizeof(name));
printf("\n%d",sizeof(name2));
return 0;
}

结果是 52 和 50。

最佳答案

根据 ISO 9899:201x (C11) 草案,( http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf )

S6.7.2.1:

paragraph 16: The size of a union is sufficient to contain the largest of its members. [...]

paragraph 17: There may be unnamed padding at the end of a structure or union.

[编辑:根据@M.M 的评论使用更新的草稿]

关于c - sizeof union 总是其中最大数据类型的 sizeof 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47404468/

相关文章:

c - ZMQ : Sync messages between APs

c - pthread 和有点 "broadcast stream"

c - 每个进程每个线程的时间片

c - C中1M元素的结构数组

c - struct 存储用户输入数据和 qsort 输出

c - 将地址存储为 char* 中的 int*

c++ - Python ctypes : wraping c++ class with operators

c - OpenGL - 绘制带有纹理的二维多边形形状

c++ - 如何设置c++编译器生成的代码

c - 用 C 语言编写带有哨兵和结构类型的动态双链表