C 语言教程 在线

1529C 共用体

关于3楼:

原文内容:

“”共用体所占内存并非是9个char,即9个字节,而是double的两倍,即16个字节,而且每次输出都是它前面离它最近的值“”

补充说明:

这是因为字节对齐

关于5楼:

原文内容:

“字节:8个二进制位构成1个"字节(Byte)",它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间。”

补充说明:

一个汉字占几个字节的存储空间,要看汉字的编码格式;

前不久测出的一个汉字占3个字节的存储空间;还没确定编码格式是UTF-8还是GB213

1528C 共用体

看了前面大家的内存占用大小计算,都没有分析到点,下面给出部分概念:

  • 位:"位(bit)"是电子计算机中最小的数据单位。每一位的状态只能是0或1。
  • 字节:8个二进制位构成1个"字节(Byte)",它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间。
  • 字:"字"由若干个字节构成,字的位数叫做字长,不同档次的机器有不同的字长。例如一台8位机,它的1个字就等于1个字节,字长为8位。如果是一台16位机,那么,它的1个字就由2个字节构成,字长为16位。字是计算机进行数据处理和运算的单位。
  • 一般的计算机都已经到了64位机  也就是说 一个基本单位就是64位,也就是8字节了。这样再综合上面的分析就不难看出,结构体,共用体,位域的定义中,按顺序分配内存,下一个字段所占大小如果超出了上一个字段占的内存单元剩余部分,那么它会重新申请下一个内存单元,而上一个多出部分将空着。

1527C 共用体

编程时经常会需要判断机器是大端机还是小端机,此时使用union就非常方便:

union
{
    char str;
    int data;
};
data=0x01020304;
if(str==0x01)
{
    cout<< "此机器是大端!"<<endl;
}
else if(str==0x04){
    cout<<"此机器是小端!"<<endl;
}
else{
    cout <<" 暂无法判断此机器类型!"<<endl;
}

注:大端机高位存在低位,小端机反之

1526C 共用体

union Data{
    int i;
    float f;
    char str[9];
    double d;
}data;

共用体所占内存并非是9个char,即9个字节,而是double的两倍,即16个字节,而且每次输出都是它前面离它最近的值

1525C 共用体

共用体作用

节省内存,有两个很长的数据结构,不会同时使用,比如一个表示老师,一个表示学生,如果要统计教师和学生的情况用结构体的话就有点浪费了!用共用体的话,只占用最长的那个数据结构所占用的空间,就足够了!

共用体应用场景

通信中的数据包会用到共用体:因为不知道对方会发一个什么包过来,用共用体的话就很简单了,定义几种格式的包,收到包之后就可以直接根据包的格式取出数据。