C语言程序设计-第7章:结构体详解
需积分: 3 178 浏览量
更新于2024-07-30
收藏 404KB PPT 举报
"C语言程序设计与应用的课程ppt第7章 结构体"
在C语言中,结构体(struct)是一种非常重要的构造数据类型,它允许我们把多个不同类型的变量组合在一起,形成一个新的数据集合。这章主要讲解了结构体的定义、结构体变量的声明与初始化以及结构体的嵌套。
1. **结构体类型的定义**
结构体通过`struct`关键字来定义,它可以包含各种基本数据类型(如int, char等)或者其他的构造数据类型。例如,定义一个名为`student`的结构体,包含学号(cNum)、姓名(cName)、年龄(nAge)和性别(cSex):
```c
struct student {
char cNum;
char cName[20];
int nAge;
char cSex;
};
```
结构体定义的最后必须以分号`;}`结束,但不能省略。
2. **结构体的嵌套定义**
结构体可以嵌套定义,即在一个结构体中包含另一个结构体。例如,定义一个`date`结构体表示日期,然后将其作为`student`结构体的一个成员:
```c
struct date {
int nYear;
int nMonth;
int nDay;
};
struct student {
char cNum;
char cName[20];
struct date dBirthday;
};
```
或者,可以将`date`结构体的定义与`student`结构体的成员定义结合在一起:
```c
struct student {
char cNum;
char cName[20];
struct {
int nYear;
int nMonth;
int nDay;
} dBirthday;
};
```
3. **结构体变量的定义**
- **独立定义结构体类型和变量**:首先定义结构体类型,然后声明结构体变量。例如:
```c
struct student {
// 成员定义
};
struct student sStu;
```
- **同时定义结构体类型和变量**:在结构体定义中直接声明变量,这通常用于简化的单例变量定义:
```c
struct student {
// 成员定义
} sStu;
```
- **无结构名的结构体变量**:可以直接定义不带结构体名称的结构体变量,但这种做法限制了对结构体类型的操作,只能创建该类型的单个变量:
```c
struct {
// 成员定义
} sS;
```
4. **结构体变量的初始化**
结构体变量可以通过初始化列表进行初始化,例如:
```c
struct student {
char cNum;
char cName[20];
int nAge;
char cSex;
} sStu = {'1001', "张三", 20, 'M'};
```
对于嵌套结构体,可以递归地初始化成员:
```c
struct student {
char cNum;
char cName[20];
struct date dBirthday;
} sStu = {'1001', "张三", {2000, 1, 1}};
```
5. **访问结构体成员**
使用点操作符`.`来访问结构体内的成员,例如:
```c
printf("学号: %c, 姓名: %s, 年龄: %d, 性别: %c\n",
sStu.cNum, sStu.cName, sStu.nAge, sStu.cSex);
```
6. **结构体指针**
结构体变量还可以通过指针来访问,这在函数参数传递和动态内存分配时特别有用:
```c
void printStudent(struct student *ptr) {
printf("学号: %c, 姓名: %s, 年龄: %d, 性别: %c\n",
ptr->cNum, ptr->cName, ptr->nAge, ptr->cSex);
}
// 调用函数
printStudent(&sStu);
```
7. **结构体数组和结构体指针数组**
结构体可以用于创建数组,可以是结构体变量数组或结构体指针数组,用于存储多个相同类型的结构体实例。
```c
// 结构体变量数组
struct student students[10];
// 结构体指针数组
struct student *studentPointers[10];
```
8. **结构体与内存管理**
结构体在内存中是连续存储的,每个成员的地址是连续的。因此,结构体的大小是所有成员大小之和加上可能的字节对齐填充。
结构体的使用极大地增强了C语言的灵活性和表达能力,使得复杂的数据结构得以实现,是编写复杂程序的基础。在实际编程中,结构体广泛应用于文件系统、数据库、图形用户界面等领域。
2173 浏览量
201 浏览量
764 浏览量
162 浏览量
129 浏览量
255 浏览量
189 浏览量
105 浏览量
212 浏览量
autumn_0528
- 粉丝: 4
- 资源: 29
最新资源
- Gooper1 Data Pack:新的 G1DP 存储库。 去贡献!-开源
- iOS Apprentice v7.0 (iOS12 & Swift4.2 & Xc.zip
- PersonalPage:我的NextJS个人开发人员页面
- CS300P07
- AppAuth-JS:JavaScript客户端SDK,用于与OAuth 2.0和OpenID Connect提供程序进行通信
- js和CSS3炫酷圆形导航菜单插件
- 裂纹检测:使用计算机视觉工具箱进行裂纹检测-matlab开发
- 开源软路由OPENWRT2020.9.8原版VMWARE固件
- Onboard-SDK:DJI Onboard SDK官方资料库
- projetoFinal-ips-2-ano
- chips_thermal_face_dataset:芯片热敏面数据集是一个大规模的热敏面数据集(来自3个不同大洲的1200幅男性和女性图像,年龄在18-23岁之间)。 该数据集将可供全世界的研究人员使用最新的深度学习方法创建准确的热面部分类和热面部识别系统
- pamansayurdev.github.io:网站paman sayur
- MO_Ring_PSO_SCD:它是用于多模态多目标优化的多目标 PSO-matlab开发
- resynthesizer:用于纹理合成的gimp插件套件
- NavigationDrawer:这是一个示例项目,用于演示如何制作导航抽屉。此外,在这个项目中,我添加了材料设计,因此对于想要实现材料设计、工具栏等的人也有帮助
- hacker-news-clone