- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有一个 union u,其中有两个相同类型(例如 int)的成员 a
和 b
。
union u{
int a,b;
char c;
};
如果我写入a
,按值将它传递给函数,函数从b
读取,期望得到a
值,考虑到 a
和 b
具有相同的类型,会有任何问题吗?成员读取是否需要完全反射(reflect)成员写入?
最佳答案
是的,没关系。
标准(C11 草案)说:
[...] if a union contains several structures that share a common initial sequence (see below), and if the union object currently contains one of these structures, it is permitted to inspect the common initial part of any of them anywhere that a declaration of the completed type of the union is visible
这里的两个整数可以被认为是(非常简单的)结构,它们共享相同的初始序列。
即使忽略它,还有:
If the member used to read the contents of a union object is not the same as the member last used to store a value in the object, the appropriate part of the object representation of the value is reinterpreted as an object representation in the new type
将 int
重新解释为 int
是非常安全的。 :)
关于c - 同类型 union 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40256870/
假设我有一个 union u,其中有两个相同类型(例如 int)的成员 a 和 b。 union u{ int a,b; char c; }; 如果我写入a,按值将它传递给函数,函数从
我是一名优秀的程序员,十分优秀!