这两个不太常用的小知识点,今天碰到了,所以特来总结一下。
union类
源于下面这道题
union X
{
int a;
struct
{
short b;
short c;
};
};
int main(){
X x;
x.a = 0x20150810;
printf("%x,%x\n", x.b, x.c);
return 0;
}
C++11之前的union
union就是里面的成员共用同一个存储空间,这个存储空间的大小与union中占用空间最大的一个成员相同
大小端问题
问输出结果的可能的值
如果按照大端模式存储:从低地址到高地址:20 15 08 10
输出从低地址到高地址:20 15 08 10
如果按照小端模式存储:从低地址到高地址:10 08 15 20
输出从高地址到低地址:08 10 20 15
一般intel平台就是小段机,所以我的电脑上就显示810,2015
大段就是一个数据,里面字节(即8位)储存的顺序跟内存一样是从低到高的
而小端就是刚好反过来。记着输出的时候还要再反义词别忘了,就跟上面说的那样。
再来一个union的题巩固一下
union S
{
std::int32_t n; // occupies 4 bytes
std::uint16_t s[2]; // occupies 4 bytes
std::uint8_t c; // occupies 1 byte
}; // the whole union occupies 4 bytes
int main()
{
S s = {
0x12345678}; // initializes the first member, s.n is now the active member
// at this point,