C语言中的关键字(2)

自定义数据类型

structunionenumtypedef

1. struct  结构体

           各种数据类型的集合(打包封装)

struct person{

int age;

int height;

}myson;

person是一个新的类型,不是一个变量名,

相当与

struct person{

int age;

int height;

};
struct person myson;

1.2 所占空间的计算:

1.整体空间是占用空间的最大成员(的类型)所占字节数的整数倍。

2.数据对齐原则:内存按结构体成员的先后顺序排列,当排到该成员时,其前面已摆放的空间大小必须是该成员类型大小的整数倍,如果不够补齐,依次向后类推。

例子:

32位,char一个字节,int四个字节,double 8个字节

int main()
{
	struct my {
		char a;
		double b;
		int c;
		char d;
	};

	printf("int占%d个字节\n",sizeof(int)); 
	printf("double占%d个字节\n", sizeof(double));
	printf("char占%d个字节\n", sizeof(char));
	printf("结构体my占%d个字节\n", sizeof(my));
}

具体分析: char a;

1 a占一个字节,结构体第一成员的起始地址是0,也就是被a占据。

2 ddouble  b ,8个字节  数据对齐原则:其前面已摆放的空间大小必须是该成员类型大小的整数倍,如果不够补齐

因为a的空间大小是1,b是8 ,因此,不够补齐,在补7个,现在成为 8+8=16个

3 int c,4个字节,16是4的整数倍,直接加16+4=20

4 char d ,1个字节,20是1的整数倍。20+1=21

整体空间是占用空间的最大成员(的类型)所占字节数的整数倍。

最大成员类型为8字节,比21要大,因此是3*8=24

2.union 共用体

在union中所有的数据成员共用一个空间,同一时间只能存储一个数据成员,所有的数据成员具有相同的起始地址。并且所需空间大小只取决于最大元素的类型, 所以联合体的好处是能节省内存空间。对于一些数据不能再同一时间同时被用到,则可以考虑用union。

3.enum 枚举类型

enum weekday{sun,mon,tue,wed,thu,fri,sat}; 

定义变量为枚举类型:

enum weekday day;

或者

enum weekday{sun,mon,tue,wed,thu,fri,sat} day; 

其中,花括号里为 枚举元素    是常量,不是变量,不能给其赋值,他们是有值的。按顺序的

4.typedef 

与#define 挺像的,定义自己习惯的数据类型名称,来替代系统默认的基本类型名称、数组类型名称、指针类型名称与用户自定义的结构型名称、共用型名称、枚举型名称等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值