200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > C语言自定义类型

C语言自定义类型

时间:2019-12-04 02:16:12

相关推荐

C语言自定义类型

结构体

结构体声明

声明时,必须列出它包含的所有成员.

struct tag { member-list } variable-list;

例如

struct Student {int number;// 学号char name[1024];// 姓名int age;// 年龄int high;// 身高} student;

成员

结构体的成员可以是标量,数组,指针甚至其他结构体, 不能包含自身, 但可以包含指向自身的指针

struct Exemp {int i;float f;long l;struct Student s;struct Exemp *p;}

成员的直接访问

结构体的成员是通过 . 操作符访问的, 左侧是结构体变量的名字, 右侧是成员名字.

student.name;student.number;

成员的间接访问

你拥有一个指向结构体变量的指针,就需要间接访问结构体成员

struct Student *sp;(*sp).name;sp->name;// 这两种方法都能用

结构体的初始化

结构体初始化使用一对花括号,由逗号分隔开,每个值按照结构体成员列表的顺序写出, 初始值列表不够,剩余的成员将使用缺省值进行初始化.

struct Student stu = {11, "HHH", 24, 180 };

结构体的内存对齐

首先结构体的对齐规则

第一个成员在结构体变量偏移为0处其他成员要对齐到成员自身的对齐数的整数倍. 对齐数为编译器默认的对齐数和成员本身所占字节数大小的较小值. VS默认是8, Linux 默认为4.结构体总体的大小为其成员中最大对齐数的整数倍嵌套的结构体对齐到自己的最大对齐数的整数倍

struct Tmp {char ch;short sh;int i;double;} tmp;sizeof(tmp);// 在32位平台上VS中所占内存大小为16

结构体作为函数参数

将结构体作为参数传递给函数是合法的,但是这种做法并不好.参数使用传值调用,会将实参拷贝一份传递给函数,这样效率就会很低,所以将结构体作为函数参数是应使用指针,这样就比拷贝整个结构体效率要高很多.

位段

位段和结构体类似, 位段的成员是一个或多个位的字段, 这些长度不同的字段实际上存储在一个或多个整型变量中.

位段的声明

位段的声明和结构体成员声明相同, 但有两个例外

位段成员必须声明为 int, signed int, unsigned int 类型在成员名后面跟一个冒号和一个整数,这个整数指定该位段所占用的位的数目

例如:

struct Tmp {int i : 5;int j : 10;int k : 16;} tmp;

枚举

将一种类型的可能取值全部列举出来, 使用关键字 enum

例如:

enum Day {Mon;Tue;Wed;Thu;Fri;Sat;Sun;};enum Day day = Sun;// 只能使用枚举常量给枚举变量赋值

联合

联合的所有成员使用同一块内存

例如:

union IP {int ip;char ch[4];};union IP ip = {0xFFFFFFFF };printf("%d.%d.%d.%d\n", ip.ch[0], ip.ch[1], ip.ch[2], ip.ch[3]);// 输出结果: 255.255.255.255

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。