标签:
<pre name="code" class="cpp">union myun { struct { int x; int y; int z; }u; int k; }a; int main() { a.u.x =4; a.u.y =5; a.u.z =6; a.k = 0; printf("%d %d %d\n",a.u.x,a.u.y,a.u.z); return 0; }union类型是共享内存的,以size最大的成员大小作为自己的大小,这样的话,myun这个结构就包含u这个结构体,而大小也等于u这个结构体 的大小,在内存中的排列为声明的顺序x,y,z从低到高,然后赋值的时候,在内存中,就是x的位置放置4,y的位置放置5,z的位置放置6,现在对k赋 值,对k的赋值因为是union,要共享内存,所以从union的首地址开始放置,首地址开始的位置其实是x的位置,这样原来内存中x的位置就被k所赋的 值代替了,就变为0了,这个时候要进行打印,就直接看内存里就行了,x的位置也就是k的位置是0,而y,z的位置的值没有改变,所以应该是0,5,6
typedef unsigned char BYTE; int main(int argc, char* argv[]) { unsigned int num; BYTE *p = (BYTE*)# num = 0; *p = 0xff; if(num == 0xff) { printf("The endian of cpu is little\n"); } else //num == 0xff000000 { printf("The endian of cpu is big\n"); } return 0; }
int checkCPU() { union w { int a; char b; } c; c.a = 1; return (c.b == 1); }
为’b’表示big endian )
<span style="font-size:18px;">typedef unsigned char BYTE; //报文内容联合体 typedef union tagPacketContent { STRUCTTYPE1 pkt1; STRUCTTYPE2 pkt2; STRUCTTYPE3 pkt1; STRUCTTYPE4 pkt2; }PacketContent; //统一的报文数据结构 typedef struct tagPacket { BYTE pktType; PacketContent pktContent; }Packet</span>;
标签:
原文地址:http://blog.csdn.net/sxhlovehmm/article/details/45483023