typedef union {
float flts[4];
struct {
GLfloat r;
GLfloat theta;
GLfloat phi;
GLfloat w;
};
struct {
GLfloat x;
GLfloat y;
GLfloat z;
GLfloat w;
};
} FltVector;
Run Code Online (Sandbox Code Playgroud)
好的,所以我想我得到了如何使用它,(或者,这是我看到它使用的方式)即.
FltVector fltVec1 = {{1.0f, 1.0f, 1.0f, 1.0f}};
float aaa = fltVec1.x;
etc.
Run Code Online (Sandbox Code Playgroud)
但我真的不知道联盟宣布了多少存储空间(4个花车?8个花车?12个花车?),怎么样?为什么?还有为什么在使用FltVector {{}}时有两组花括号?
为什么要使用工会呢?为什么不这样做..
struct FltVector {
GLfloat x;
GLfloat y;
GLfloat z;
GLfloat w;
}
Run Code Online (Sandbox Code Playgroud)
?
任何指针都非常赞赏(对不起双关语)
联合允许您为不同类型的变量"回收"相同的内存区域.通常,union会占用与其单个最大成员一样多的存储空间,在这种情况下可能需要4个浮点数.你可以查看sizeof.
在这种情况下,union可能用于为结构中的相同浮点数提供1)替代名称(例如x,r共享相同的内存),以及2)访问与数组相同的四个浮点数(例如x,flts[0]共享相同的内存) .有时,工会被用在各种"黑客"中,通常是非便携式的,以访问某些数据类型的内部,例如机器顺序中整数的单个字节.
如果sizeof(GLfloat) == sizeof(float)那时,已经分配了4个花车.
flts[0],r并且x都将在这里引用相同的内存.
在联合中,联合中声明的每个不同变量都指向同一块内存.
这里我们有3个变量,2个结构和一个数组,每个变量都从内存中的同一点开始.