### C语言用户自定义数据类型——结构体
#### 一、结构体概述
在C语言中,用户自定义数据类型是一种非常重要的特性,它允许程序员根据实际需求定义新的数据类型。其中,结构体(Struct)是最常用的一种自定义数据类型。通过结构体,可以将不同类型的数据组合成一个整体,从而更方便地管理和操作这些数据。
#### 二、结构体的定义与概念
1. **结构体类型的概念**
结构体是一种复合数据类型,它可以将不同类型的数据组织起来形成一个整体。例如,在日常生活中,我们经常会遇到一些需要记录多种信息的情况,如员工信息表。这样的表格通常包含了员工的工作证号、姓名、性别、年龄、部门、工资等多个属性,这些属性虽然类型不同,但逻辑上是紧密相关的。在C语言中,可以通过结构体来表示这样的数据。
2. **结构体的定义**
在C语言中,结构体类型的定义格式如下:
```c
struct [标识符] {
数据类型 变量名;
...
};
```
- `struct` 是定义结构体的关键字。
- `[标识符]` 是用户定义的结构体名称。
- 数据类型可以是任何内置类型或者已经定义过的其他结构体类型。
- 变量名则是结构体内部成员的名称。
示例代码如下:
```c
struct staff {
char number[8];
char name[10];
char sex;
int age;
char dep[20];
float wage[2];
};
```
这里定义了一个名为 `staff` 的结构体,包含了员工的基本信息,如工作证号、姓名、性别等。
#### 三、结构体类型的说明
1. **结构体类型说明的一般形式**
结构体类型说明的一般形式如下:
```c
struct [标识符] {
数据类型 变量名;
...
};
```
- `struct` 关键字用来声明定义一个结构体。
- `[标识符]` 代表结构体的名称。
- 成员列表包含了一个或多个数据成员的声明。
- 成员可以是基本类型变量、数组,甚至其他的结构体类型变量。
2. **结构体成员的说明**
结构体成员可以是基本类型变量、数组或另一个结构体。例如:
```c
struct student {
char no[9]; // 学号
char name[20]; // 姓名
char sex; // 性别
unsigned int age; // 年龄
unsigned int classno; // 班级
float grade; // 成绩
};
```
这里定义了一个 `student` 结构体,包含了学生的学号、姓名、性别、年龄、班级和成绩等信息。
#### 四、结构体类型的几点说明
1. **内存分配**
定义结构体类型本身并不会为这个类型分配内存空间,只有在定义结构体变量时,系统才会为这些变量分配相应的内存空间。
2. **成员的独立性**
结构体中的成员并不是独立的变量,它们是与结构体整体相关的。因此,即使在同一个结构体中有同名的成员,也不会导致命名冲突。
3. **嵌套定义**
结构体支持嵌套定义,即在一个结构体中可以包含另一个结构体作为其成员。例如:
```c
struct Student {
char name[9];
struct Birthday {
int year;
int month;
int day;
} birthday;
char sex;
};
```
4. **无类型名的结构体**
结构体定义时可以不指定类型名,但这种情况下必须立即定义至少一个结构体变量,并且只能在定义该结构体变量的地方使用。例如:
```c
struct {
int year;
int month;
int day;
} birthday;
```
5. **结构体大小**
可以使用 `sizeof` 运算符来获取结构体的大小,即结构体所占的字节数。例如:
```c
printf("%d", sizeof(struct Student));
```
上述代码会输出 `struct Student` 的大小。
#### 五、结构体变量的定义与初始化
1. **结构体变量的定义方式**
结构体变量可以在定义结构体类型的同时定义,也可以在定义结构体类型之后单独定义。
```c
struct date {
int month;
int day;
int year;
};
struct staff {
char number[8];
struct date birthday;
char sex;
};
struct staff employee1 = {"00000001", {1990, 1, 1}, 'M'};
```
上述代码首先定义了两个结构体 `date` 和 `staff`,然后定义了一个 `staff` 类型的变量 `employee1` 并进行了初始化。
总结来说,结构体是C语言中非常强大的工具,可以帮助开发者更好地组织和管理数据。通过定义结构体,可以将不同类型的数据组合在一起,实现复杂数据结构的设计和实现。