有一种东西,叫union
。
看起来这玩意平平无奇,但它有一个特性:在这里面定义的任何变量都会在同一个指针上。
内存计算规则:使用最大内存的变量及以上的使用单个内存最大的变量的倍数。
如:
union U{
int n;
char x[11];
double d;
};
...
U u;
cout<<sizeof(u);
输出则为11及以上的8的倍数:16。
而同一个指针对应的数值也是一样的。
所以如果将一个整型和一个长度为2的短整型数组放在同一个union
中,我们就可以通过short
数组来访问int
的前16位和后16位。
代码如下:
#include<iostream>
using namespace std;
union node{
unsigned int num;
unsigned short tmp[2];
};
int main()
{
node u;
cin>>u.num;
swap(u.tmp[0],u.tmp[1]);
cout<<u.num;
return 0;
}