结构体
一、概述
当一个整体由多种数据构成时,我们可以用数组来表示这个整体,但是数组有个特点:内部的每一个元素都必须是相同类型的数据。
在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名、年龄、身高等数据构成,这些数据都具有不同的类型,姓名可以是字符串类型,年龄可以是整型,身高可以是浮点型。为此,C语言专门提供了一种构造类型来解决上述问题,这就是结构体,它允许内部的元素是不同类型的。
二、结构体的定义
结构体内部的元素,也就是组成成分,我们一般称为"成员"。结构体的一般定义形式为:
struct 结构体名{
类型名1 成员名1;
类型名2 成员名2;
……
};
三、结构体变量的定义
1.先定义结构体类型,再定义变量
struct Student {
char *name;
int age;
};
struct Student stu;
2.定义结构体类型的同时定义变量
struct Student {
char *name;
int age;
} stu;
3.直接定义结构体类型变量,省略类型名
struct {
char *name;
int age;
} stu;
注意:
1.结构体的成员可以是别的结构体但不可以递归
struct Date {
int year;
int month;
int day;
};
struct Student {
char *name;
int age;
struct Date birthday;
};
2. 结构体变量占用的内存空间是其成员所占内存之和,例如成员含有一个int,一个float,则在32位编译器中占用4+4=8个字节。
3. 相同类型的结构体变量之间可以进行整体赋值
</pre><p> </p><p>四、结构体变量的初始化</p><p>例如:</p><p></p><pre name="code" class="cpp">struct Student {
char *name;
int age;
};
struct Student stu ={"yang", 22};
注意:只能在定义变量的同时进行初始化赋值,初始化赋值和变量的定义不能分开
五、结构体变量成员的访问
struct Date {
int year;
int month;
int day;
};
struct Student {
char *name;
struct Date birthday;
};
struct Student stu;
stu.name = “yang”;
stu.birthday.year =1992;
六、结构体数组
struct Student {
char *name;
int age;
};
struct Student stu[n];
与普通结构体一样有三种定义方式,n代表元素个数。
初始化:
struct Student{
char *name;
int age;
}
struct Student stu[2]= { {"yang", 22}, {"yu", 22} };
可以通过下标访问结构体数组元素。
七、指向结构体的指针
定义形式:struct 结构体名称 *指针变量名
访问结构体成员的方式:
1.结构体变量名.成员名
2.(*指针变量名).成员名
3.指针变量名->成员名
枚举
枚举是一种形式和结构体相似的数据类型。
一、概述
枚举是C语言中的一种基本数据类型,当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,用一个枚举类型的变量来表示性别,因为性别只有男,女两种取值。
二、枚举的定义
一般形式为:enum 枚举名 {枚举元素1,枚举元素2,……};
例如:enum Gender{male,female};
三 、枚举变量的定义
和结构体一样也有三种方式
1.先定义枚举类型,再定义枚举变量
enum Gender {male,female};
enum Gender g;
2.定义枚举类型的同时定义枚举变量
enum Gender {male,female} g;
3.省略枚举名称,直接定义枚举变量
enum {male,female} g;
四、注意
1.C语言编译器会将枚举元素作为整型常量处理,称为枚举常量。
2.枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1。
3.也可以在定义枚举类型时改变枚举元素的值
没有指定值的枚举元素,其值为前一元素加1。
五、赋值与遍历
1.可以给枚举变量赋枚举常量或者整型值
enum Gender {male,female} g;
g = male; // 等价于 g = 0;
g = 1; // 等价于 g = female;
2.遍历枚举元素
enum Gender {male,female} g
for (g = male; g<= female; g++) {
printf("%d\n", g);
}
输出结果为:0
1