c语言的联合体以及大小端 (备忘)

来源:互联网 发布:k歌软件电视 编辑:程序博客网 时间:2024/04/30 18:49

关于union

1、union中可以定义多个成员,union的大小由最大的成员的大小决定。 
2、union成员共享同一块大小的内存,一次只能使用其中的一个成员。 
3、对某一个成员赋值,会覆盖其他成员的值。

4、联合体union的存放顺序是所有成员都从低地址开始存放的。
下面看一个简单的代码:

 #include <stdio.h>
 
typedef union{
 char c;
 int a;
 int b;
}Demo;
 
int main(int argc, char **argv)
{
 Demo d;
 d.c = 'H';
 d.a = 0xf41;
 d.b = 0x1f41;
 
 printf("size: %d\n", sizeof(d));
 printf("%c\t%x\t%x\n", d.c, d.a, d.b);
 
 return 0;
}

结果:4  

A  1f41 1f41 




什么是大端和小端?
Big-Endian和Little-Endian的定义如下:

1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

判断大端模式和小端模式:


代码:
#include <stdio.h>
int main()
{
    union check
    {  int    i;
       char ch;
    }m;
    m.i=1;
    if(m.ch==0x00) printf("System is Big-Endian!\n");
    if(m.ch==0x01) printf("System is Little-Endian!\n");
    return 0;
}


转载及参考:http://blog.163.com/yx_xie2007/blog/static/1024642532011101411940162/


0 0
原创粉丝点击