【C语言】联合体和结构体

来源:互联网 发布:日记软件什么最好 编辑:程序博客网 时间:2024/04/29 18:13

一、前言

      通过学习这两个要从内存这个方面来了解以下,所以小编准备了对这个问题的总结,通过对比学习会更加的深刻了解。

二、内容要点

  • union – 联合体,它的成员共享同一内存,内存分配时,考虑占内存最多的那个成员。

  • struct – 结构体,它的每个成员都有自己的内存空间,但空间在同一区域块,分配时还考虑4字节对齐(即不满4的倍数时,凑满到4的倍数)。

三、代码示例

#include<stdio.h>main(){    union     {        char c;        int i;        float a ;    } test; // float 最长,为4 字节。分配4字节。    struct t     {          int i;        char c;         float a;     }test2;  //i 4 字节, c 1 字节, a 4字节, 共需 9 字节,考虑 4 字节 对齐,分配 12 字节。    int j;    test.i=0x1234;       test.c='A';    //A对应的16进制的ASCII码为41H    printf("%x\n",test.i);    printf("%c\n",test.c);    printf("%d %d \n",sizeof(test),sizeof(test2));      scanf("%x",&j);}

运行结果:

结果

分析:

      小编直接做的时候就写的是1234 ,显然是不对的,没有理解到union的作用。对于本题,int 是4字节, float是4字节,都是最大的,所以这个union的联合体就是4字节。当我们把test.i=0x1234 存入内存的时候,会现存低字节的34,然后在存储高字节的12,当我们存完后结果暂时是3412;后来我们又存储了test.c=’A’,A对应的16进制的ASCII码为41H,所以就会把低字节的34挤掉,结果就变成了1241.

四、小结

类型

C语言-数据类型大小总结:

变量的长度(VC6环境下)

1Byte =8bit ,一字节等于8位。

类型 大小(32位机)(Byte 字节) 范围(Byte 字节) char 1 128 ~ +127 short 2 -32767 ~ + 32768 int 4 -2147483648 ~ +2147483647 long 4 0~0xffffffffUL float 4 +/- 3.40282e+038 double 8 1.7 * 10^308
0 0
原创粉丝点击