C语言补充知识.ppt_第1页
C语言补充知识.ppt_第2页
C语言补充知识.ppt_第3页
C语言补充知识.ppt_第4页
C语言补充知识.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数组 数组概述 1 数组一组具有相同数据类型的数据的有序的集合 2 数组元素数组中的元素 数组中的每一个数组元素具有相同的名称 不同的下标 可以作为单个变量使用 所以也称为下标变量 在定义一个数组后 在内存中使用一片连续的空间依次存放数组的各个元素 数组概述 3 数组的下标是数组元素的位置的一个索引或指示 4 数组的维数数组元素下标的个数 根据数组的维数可以将数组分为一维 二维 三维 多维数组 5 数组的优点 1 可以让一组同类型的数据共有一个数组名 而不必为每一个数据都定义一个变量名 2 数组的元素是按顺序存放的 在一些批量处理中使用方便 一维数组 数组是一组有序数据的集合 数组中每一个元素的类型相同 用数组名和下标来唯一确定数组中的元素 一维数组中的各个数组元素是排成一行的一组下标变量 用一个统一的数组名来标识 用一个下标来指示其在数组中的位置 下标从0开始 一维数组通常和一重循环相配合 对数组元素进行处理 一维数组 定义方式 类型说明符数组名 整型常量表达式 例 inta 10 定义一个数组 数组名a 有10个元素 每个元素的类型均为int 这10个元素分别是 a 0 a 1 a 2 a 3 a 4 a 8 a 9 一维数组 注意 1 C语言中 数组下标从0开始 2 C语言不允许对数组的大小做动态定义 如 intn scanf d 错误因为在编译时 C编译器根据已知数组大小分配内存 一维数组 说明 1 数组名 按标识符规则 本例a就是数组名 2 整型常量表达式 表示数组元素个数 数组的长度 可以是整型常量或符号常量 不允许用变量 整型常量表达式在说明数组元素个数的同时也确定了数组元素下标的范围 下标从0开始 整型常量表达式 1 注意不是1 整型常量表达式 一维数组 C语言不检查数组下标越界 但是使用时 一般不能越界使用 否则结果难以预料 覆盖程序区 程序飞出 覆盖数据区 数据覆盖破坏 操作系统被破坏 系统崩溃 本例数组元素个数是10个 下标从0 9 一维数组 3 类型说明 指的是数据元素的类型 可以是基本数据类型 也可以是构造数据类型 类型说明确定了每个数据占用的内存字节数 比如整型2字节 实型4字节 双精度8字节 字符1字节 本例数组元素是整型 每个元素占2个字节 因为有10个数组元素 所以占用20字节 4 C编译程序为数组分配了一片连续的空间 5 C语言还规定 数组名是数组的首地址 即a a 0 10 指针 指针复习 一 概念1 指针 指针就是地址 是变量 数组 函数在内存中占据的存储空间的首地址 2 指针变量 保存指针 地址 的变量 其定义形式为 基类型说明 指针变量名 基类型说明指定了指针指向的变量类型 指向不同类型数据的指针的运算结果不同 指针本身没有类型 指向任何类型变量的指针都是用来保存地址的 在内存中占2字节 指针变量名 指针变量值 变量名 地址 变量值 例如 inta 5 int p 指针复习 3 指针常量 1 数组名 数组在内存中占据一片连续的内存区域 数组名代表该片内存区域 该数组 的首地址 即数组中第一个元素 a 0 的地址 由于在程序开始运行时就为数组分配了内存区域 所以数组在内存中的地址不会改变 数组名作为该数组的首地址是固定的 即为一个指针常量 2 函数名 与数组类似 函数名代表了该函数在内存中的首地址 同样是一个指针常量 例如 inta 10 b a 以上语句都是错误的 指针复习 4 指针运算符指针变量p保存了变量c的地址 则称指针变量p指向变量c 变量c称为指针变量p的目标变量 指针运算符 表示引用某指针变量指向的目标变量 例如 intd 5 p p 目标变量 p的值 p的值 a的值 p指向a 指针复习 5 指针的运算指针的运算只能用于指向数组元素的指针 1 指针加减一个整数例如 inta 5 1 3 5 7 9 p p a p指向数组元素a 0 保存a 0 的地址 p等于1 p p指向下一个数组元素a 1 p等于3 p 2 p指向数组元素a 3 p 7 p 3 p指向数组元素a 0 p p a 指针复习 二 指向数组的指针指针可以指向数组的首地址 也可以指向数组中任何一个元素 例如 输出数组中的元素 程序1 main inta 5 1 3 5 7 9 i for i 0 i 5 i printf d t a i 指针复习 程序2 main inta 5 1 3 5 7 9 i p for p a i 0 i 5 i printf d t p i 程序3 main inta 5 1 3 5 7 9 p for p a p a 5 p printf d t p p 指针复习 三 指向字符串的指针c语言中 字符串实际上是用字符数组来保存的 所以 指向字符串的指针实际上还是指向字符数组的指针 例如 将输入的字符串转换为大写 程序1 main charstr China inti for i 0 i a 指针复习 程序2 main charstr China p inti for p str i 0 i a 程序3 main charstr China p for p str p a 问题 上述两个程序中的puts str 改成puts p 可不可以 指针复习 七 二级指针即指向指针的指针 二级指针指向的目标变量依然是一个指针变量 例如 求字符串的长度 程序1 main charstr 20 p intcount gets str for p str p 0 p count printf d count 指针复习 程序2 main charstr 20 p pp intcount gets str p str for pp 指针复习 八 指针作为函数参数使用指针作为函数参数传递时 传递的是变量 数组元素和函数名等地址值 因此实参和形参引用的是同一个元素 例如 程序1 main inta 3 b 5 fun a b printf a d b d n a b voidfun intx inty intz z x x y y z printf x d y d n x y 3 5 输出结果 x 5 y 3a 3 b 5 指针复习 程序2 main inta 3 b 5 int p1 输出结果 ip1 5 ip2 3a 3 b 5 a b 指针复习 程序3 main inta 3 b 5 int p1 3 输出结果 p1 5 p2 3a 5 b 3 5 24 结构体 一个学生的信息有学号 姓名 性别 年龄 住址 成绩等 一本图书的信息有分类编号 书名 作者 出版社 出版日期 价格 库存量等 如何描述这些类型不同的相关数据 结构体类型 信息管理 结构体 一种构造类型数据 结构体由若干不同类型的数据项组成 构成结构体的各个数据项称为结构体成员 struct结构体名 数据类型1成员名1 数据类型2成员名2 数据类型n成员名n 结构体类型的定义 结构体类型定义的一般形式 struct为关键字 结构体名是用户定义的类型标识 中是组成该结构体的成员 成员的数据类型可以是C语言所允许的任何数据类型 例如图书类型的定义 structbookcard charnum 10 图书分类编号是字符数组类型 charname 30 书名是字符数组类型 charauthor 30 作者是字符数组类型 charpublisher 60 出版社是字符数组类型 floatprice 价格是单精度实型 intn 库存量是整型 例如学生类型的定义 structstudent charnum 8 学号是字符数组类型 charname 30 姓名是字符数组类型 charsex 性别是字符型 intage 年龄是整型 charaddr 60 住址是字符数组类型 intscore 6 成绩是整型数组类型 结构体类型的定义 结构体类型的定义 利用已定义的结构体类型名定义变量struct结构体名变量名表 例如 structbookcardbook1 100 structstudents 30 t1 t2 按照结构体类型的组成 系统为定义的结构体变量分配内存单元 结构体变量的各个成员在内存中占用连续存储区域 结构体变量所占内存大小为结构体中每个成员所占用内存的长度之和 结构体类型与变量的说明 类型与变量是不同的概念 应先定义一个结构体类型 而后再定义结构体变量 系统对类型不分配空间 仅对变量分配空间 只能对变量赋值 存取或运算 而不能对一个类型赋值 存取或运算 成员也可以是结构变量 对结构中的成员 可以单独使用 它的作用与地位相当于普通变量 成员名可与程序中的变量名相同时 也可与不同结构体类型的成员名相同 二者代表不同的对象 结构体类型与变量的说明 structdate intyear month day structstudent charnum 8 charname 30 charsex structdatebirthday 成员为结构体类型 charaddr 60 intscore 6 结构体变量的引用与初始化 1 结构体变量的初始化 例 结构体变量的初始化 structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a 9606011 Liming M 1977 12 9 83 b 9608025 Zhangliming F 1978 5 10 87 c 如果初值个数少于结构体成员个数 则将无初值对应的成员赋以0值 如果初值个数多于结构体成员个数 则编译出错 结构体变量的引用与初始化 2 结构体变量的运算 用sizeof运算符计算结构体变量所占内存空间 structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a sizeof a 的结果为8 20 1 6 4 39sizeof structstudent 的结果为39 结构体变量的引用与初始化 2 结构体变量的运算 同类型结构体变量之间的赋值运算 结构体变量之间进行赋值时 系统将按成员一一对应赋值 structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a 9606011 Liming M 1977 12 9 83 b c c a 结构体变量的引用与初始化 2 结构体变量的运算 对结构体变量进行取址运算 structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a 对结构体变量a进行 a运算 可以得到a的首地址 它是结构体类型指针 结构体变量的引用与初始化 3 结构体变量成员的引用 结构体变量成员引用的一般形式 结构体变量名 成员名 结构体变量a的各成员可分别表示为a num a name a sex a birthday a score structdate intyear month day structstudent charnum 8 name 20 sex structdatebirthday floatscore a 是分量运算符 运算级别最高 a birthday yeara birthday montha birthday day 结构体变量的各个成员可进行何种运算 由该成员的数据类型决定 结构体数组 数组中每个元素都是相同类型的结构体变量 这样的数组称为结构体数组 当需要处理多个相同类型的结构体变量时 使用结构体数组显然更加方便 结构体数组的定义 可采用直接定义和间接定义两种方式 和结构体变量类似 结构体数组也可以使用初始化的方式进行赋值 指向结构体类型数据的指针 1 结构体指针变量的定义 结构体指针变量定义的一般形式 struct结构体名 指针变量名 例如 structstudent p structdate intyear month day q p是指向structstudent结构体变量的指针变量 指向结构体类型数据的指针 2 结构体成员的三种引用形式 structdate intyear month day d p 用结构体变量名的引用形式 d yeard monthd day用结构体指针变量的引用形式 p year p month p day用指向运算符的引用形式 p yearp monthp day p d year 指向结构体类型数据的指针 例 输入今天的日期 然后输出该日期 main structdate 在函数中定义结构体类型 intyear month day today p 指向结构体类型数据的指针 3 指向结构体数组的指针 例 用结构体指针输出学生信息 structstudent intnum charname 20 charsex stu 4 10101 ZhangSan M 10102 LiSi M 10104 WangWu F 10108 ZhaoLiu M 指向结构体类型数据的指针 main structstudent p printf No tName tSex n for p stu pnum p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论