[置顶] 【C语言】联合体和结构体

时间:2022-09-05 18:42:59

一、前言

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

二、内容要点

  • 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);
}

运行结果:

[置顶]        【C语言】联合体和结构体

分析:

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

四、小结

[置顶]        【C语言】联合体和结构体

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