C语言_自定义类型
2017-12-29 23:13
211 查看
结构体
结构体是一些值的集合,每个值都是一个成员变量,每个成员都可以是不同类型的变量。结构体的声明:
//比如描述一个学生信息 struct Stu { char name[20]; long long phone; char sex[5]; }; struct Stu s;//定义结构体变量 s.phone=1234567890;//结构体成员的访问 //匿名结构体类型 struct { char name[20]; long long phone; char sex[5]; }Stu,*pStu;
结构体的嵌套和初始化
struct Point { int x; int y; }; struct Node { int data; struct Piont p; struct Node* next; }; struct Node n={0,{0,0},NULL};//结构体嵌套初始化
结构体内存对齐
对齐规则:
1.第一个成员在与结构体变量偏移量为0的地址处。
2.其他成员要对齐对齐数的整数倍的地址处。
(对齐数=编译器默认对齐数与该成员大小的较小值)
3.结构体总大小为最大对齐数的整数倍。
4.如果嵌套了结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
结构体大小计算
struct S1 { char c1; int i; char c2; }; struct S2 { char c1; char c2; int i; }; struct S3 { double d; char c; int i; }; struct S4 { char c1; struct S3 s3; double d; }; printf("%d\n", sizeof(struct S1));//12 printf("%d\n", sizeof(struct S2));//8 printf("%d\n", sizeof(struct S3));//16 printf("%d\n", sizeof(struct S4));//32
位段
位段的空间是按需要以4个字节(int)或者1个字节(char)的方式开辟的位段的成员可以是int;unsigned int;signed int;或者char(属于整形家族)类型
struct A { int _a : 2; int _b : 5; int _c : 10; int _d : 30; }; struct S { char a : 3; char b : 4; char c : 5; char d : 4; } printf("%d\n", sizeof(struct A));//8 printf("%d\n", sizeof(struct A));//3
枚举
枚举的定义enum Day { Mon,//默认从0开始 Tues,//递增1 Wed,//2 Thur,//3 Fri=10,//10 Sat,//11 Sun,//12 };
联合(共用体)
联合是一种特使的自定义类型,这种类型定义的变量包含一系列成员,但是这些成员公用一块空间,联合变量的大小至少是最大成员的大小union Un { char c; int i; }un; printf("%d\n,sizeof(un));//4
相关文章推荐
- 使用C语言编写Python扩展——创建自定义类型(2)
- c语言自定义类型
- c语言之自定义类型
- 15、C语言用户自定义数据类型
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
- C语言-自定义函数,及其调用;函数返回值类型的自动转换,即其数量;
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
- Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型
- C语言_自定义类型_枚举 联合
- C09_C语言-typedef类型自定义
- C语言自定义bool类型
- C语言自定义类型struct
- C语言_自定义类型之结构体
- C语言typedef自定义数据类型
- c语言-自定义数据类型
- C语言基础(六)- 结构体、共用体、枚举和typeof自定义类型
- C语言自定义类型enum_typedef(待整理)
- [错误记录]C语言自定义类型typedef应用
- C语言学习历程(二)自定义数据类型与其本质
- 使用C语言编写Python扩展——创建自定义类型(1)