下面两句话–屁精极了
数据类型,指固定内存大小的别名,如int类型为4个字节内存。
变量,一段连续存储空间的别名。这段连续存储空间的大小,即变量的大小,由定义该变量的数据类型决定,即该数据类型代表的固定内存大小。数据类型,是变量的模板。
原文链接:https://blog.csdn.net/bulebin/article/details/54388735
枚举变量
既然,struct结构体变量大小等于结构体中的各个成员变量所占内存大小总和,union共用体变量大小等于共用体结构中占用内存最大的成员的内存大小。
那么enum枚举变量所占内存大小怎么计算?
应用到枚举上:
枚举类型,指一个被命名的整型常数的集合。即枚举类型,本质上是一组常数的集合体,只是这些常数有各自的命名。枚举类型,是一种用户自定义数据类型。
枚举变量,由枚举类型定义的变量。枚举变量的大小,即枚举类型所占内存的大小。由于枚举变量的赋值,一次只能存放枚举结构中的某个常数。所以
枚举变量的大小,实质是常数所占内存空间的大小(常数为int类型,当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节),枚举类型所占内存大小也是这样。
结构体里面的成员是变量,而枚举里面的成员是常量啊!(这是我个人的理解)
因为,枚举变量的取值为花括号内的任意一个值(有且只能有其中一个值),而这个值是int型的,在X86系统中,int型的数据占内存4个字节。所以sizeof© = 4,也就是枚举变量的值为4。
关于联合类型的定义
联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,而他们的特征就是这些成员会共用同一块空间(所以联合也叫共用体),
联合体的成员是共同运用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(联合体至少得有能力保存最大的那个成员)
关于联合体大小的计算
1.联合体的大小至少是最大成员的大小.
2.当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍.
#include <stdio.h>
#include <stdlib.h>
//关于联合体大小的计算
union Un1{
char c[5];
int i;
};
union Un2{
short c[7];
int i;
};
int main(){
printf("%d\n", sizeof(union Un1));
printf("%d\n", sizeof(union Un2));
system("pause");
return 0;
}
首先它们的最大对齐数都是4,Un1的最大成员大小为5,不是4的整数倍,所以对齐到8字节.Un2的最大成员大小为14(short类型为2字节),不是4的整数倍,所以对齐到16字节.