- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 常用数据结构
【学习目标】
本章将介绍在 C 语言中如何管理内存。学习要点包括如下几点:
1)了解内存组织方式。
2)能区分堆和栈的不同。
3)会使用动态管理内存函数。【学习导航】
本章的在整个课程中的位置如图10-1 所示。
图 9-1 本章学习导航
9.1 结构体
前面的课程我们学习了一些简单数据类型(整型、实型、字符型)的定义和应用,还学
习了数组 (一维、 二维)的定义和应用, 这些数据类型的特点是: 当定义某一特定数据类型,
就限定该类型变量的存储特性和取值范围。对简单数据类型来说,既可以定义单个的变量,
也可以定义数组。 而数组的全部元素都具有相同的数据类型, 或者说是相同数据类型的一个
集合。
在学生成绩管理系统中, 记录一个学生会涉及到多个数据,比如学生的姓名、性别、年龄、成绩等等。下面的程序描述了一个姓名叫“罗杰”的学生的基本信息。
#include <stdio.h>
int main()
{
char name[20] = "
char sex = '1';
int age = 20;
float score =85;
罗杰 "; // 姓名
// 性别 1: 男,2: 女
// 年龄
// 成绩
10 return 0 ;
11 }
如果有多个学生的信息需要描述呢,那么就需要定义和上面代码中第 5 行~第 8 行类似
的很多变量, 这样会出现很多变量声明; 另一个问题就是这些声明的变量彼此之间看起来并
无直接关联,无法从一个“整体”的角度来描述学生。所以 C 语言引入一种能集中不同数
据类型于一体的数据类型—结构体类型。结构体类型的变量可以拥有不同数据类型的成员,是不同数据类型成员的集合。
9.1.1 结构体类型定义
语言对结构体类型的定义形式:
struct 结构体名
{
成员项表列
};
下面的程序的第 5~11 行用结构体类型对学生的描述,注意 11 行后需要以 ”;”结束。
#include <stdio.h>
int main()
{
struct student
6
{
7
char name[20];
//
姓名
8
char sex;
//
性别 1:
男,2:
女
9
int age;
//
年龄
10
float score;
};
return 0;
}
9.1.2 结构体类型变量的定义
有了结构体类型,我们就可以定义结构体类型变量,以对不同变量的各成员进行引用。
结构体类型变量的定义与其它类型的变量的定义是一样的, 但由于结构体类型需要针对问题事先自行定义, 所以结构体类型变量的定义形式就增加了灵活性, 常用的有两种形式, 分别介绍如下:
1) 先定义结构体类型,再定义结构体类型变量:
struct student
{
3
char name[20];
//
姓名
4
char sex;
//
性别 1:
男,2:
女
5
int age;
//
年龄
6
float score;
7
};
8
9
struct student s1;
//定义结构体类型变量
10
struct student s2;
用此结构体类型,可以定义更多的该结构体类型变量。
2 ) 定义结构体类型同时定义结构体类型变量:
struct date
{
int day;
int month;
int year;
} d1,d2;
也可以再定义如下变量:
struct data d3,d4;
用此结构体类型,同样可以定义更多的该结构体类型变量。
9.1.3 结构体类型变量的引用及初始化
学习了怎样定义结构体类型和结构体类型变量, 怎样正确地引用该结构体类型变量的成员呢? C 规定引用的形式为:
<结构体类型变量名 > . < 成员名 >
比如对 9.1.2 节中定义的结构体 student s1,访问其成员 age 可以这样: s1.age
对结构体变量的成员的初始化,参看下面的代码( structInit.c ):
#include <stdio.h>
int main()
{
struct student
{
7
char name[20];
//
姓名
8
char sex;
//
性别 1:
男,2:
女
9
int age;
//
年龄
10
float score;
};
struct student s1 = {"Jack",'1',20,89.5};
s1.age = 22;
printf("%s\n",s1.name);
printf("%d\n",s1.age);
return 0;
}
程序第 13 行在定义结构体变量 s1 的同时,给所有成员赋值。第 14 行单独给 s1 的 age成员赋值,它覆盖了第 13 行赋的值。第 16 行输出: Jack。第 17 行输出
您可能关注的文档
- 3则很有哲理的小故事含感悟.docx
- 3数据结构教案栈和队列.docx
- 3第三章保险合同.docx
- 4-深圳证券交易所网下发行电子平台投资者使用协议.docx
- 4-综合布线系统标书-中国重型机械.docx
- 40句激励人努力学习的励志句子.docx
- 4、阿岗二中下学期德育工作总结.docx
- 4则人际关系的小故事及感悟.docx
- 4则关于金钱观的小故事及感悟.docx
- 4则学会选择的小故事含感悟.docx
- 2024年新疆农业职业技术学院单招综合素质考试题库 及完整答案解析.docx
- 2024-2024学年执业医师资格考试《口腔执业医师》第四次冲刺检测试卷(含精品747.pdf
- 2024-2024学年执业医师资格资格考试公共卫生执业医师测评考试卷(含答案精品1110.pdf
- 2024-2024学年助理医师资格《临床助理医师》测试试卷含答案 .pdf
- 2024保育师法律法规专项考核试题 .pdf
- 2024-2024学年云南省保山市全国计算机等级考试C语言程序设计真题二卷精品2980.pdf
- 职教领域汽车专业的知识体系课程体系.pdf
- 生产实习报告范文.pdf
- 通信工程专业认识实习报告.pdf
- 课堂教学中如何进行有效的反馈(5篇)[修改版].pdf
文档评论(0)