C++语言概述.ppt_第1页
C++语言概述.ppt_第2页
C++语言概述.ppt_第3页
C++语言概述.ppt_第4页
C++语言概述.ppt_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

第一章C 语言概述 学习目标 本章介绍C 语言的特点 基本概念 要求对C 语言有一个了解 能编写包括键盘输入 计算和显示输出等操作的简单C 程序 一 C 语言的特点 1 1980年 贝尔实验室发明 在C语言的基础上发展起来的2 具有高级语言的特点 表达力丰富 可移植性好 又有低级语言的一些特点 能实现汇编语言的大部分功能 可直接对硬件进行操作 是全面支持面向对象特性的语言 二 简单的C 程序 例1 voidmain 1 C 程序由函数组成 至少一个函数 主函数 约定为main 为程序的入口 函数可以是系统提供的库函数 也可为用户自编 函数定义格式 类型修饰符函数名 形式参数表 函数体函数原形注意 函数名后的括弧不能省 函数体是大括弧括起来的一系列C 语句2 程序中字母大小写意义不同 系统的保留字用小写 用户自定义任意3 编辑源程序 CPP 编译成 OBJ 连接成 EXE例2 includevoidmain cout 同学们 你们好 1 C 语句分为基本语句和复合语句 每个基本语句都必须以 结束 复合语句则是用大括弧 括起来的语句序列 2 程序书写风格自由 一行可有多个语句或一个语句分写在多行上 除字符串常量中的字符及注释外 其他字符须为西文字符3 格式 cout将指定的文件复制到该命令处 这种在文件头部的被包含的文件称为头文件 以h为后缀 用来说明程序中引用的函数 变量 常量 对象 数据类型等 如 cout是输出流对象 endl和 是特殊函数 5 注释 cout hello 显示hello字符串 Cout endl 从下一行行首开始显示 hello 例3 include definePI3 1416voidmain doubler area cout r area PI r r cout 变量 变量 cin为连接键盘的输入流对象如 cin i j k 键盘输入 345 8则i 34 j 5 k 8 第二章基本数据类型与表达式 学习目标 本章主要介绍各种数值类型和表达式 要求掌握各种数据类型 常量 变量的使用 数值及逻辑表达式的构造方法 了解表达式副作用一 C 数据类型概述1 数据类型 整型类 包括整型 短整型 长整型 字符型 枚举型和逻辑型实型类 包括单精度 双精度和长双精度数组指针类 包括指针和引用记录类 包括结构和联合 2 分类的原因 不同的数据类型存储格式不同 编译系统须知每个数据的类型才能为之分配空间 安排存储 针对不同类型数据所能实施的操作不相同 3 常量和变量是程序中数据的最常见的表现形式二 整型数据 1 基本情况见P15表2 12 整型常量的表示 3 整型变量的定义和初始化 格式 类型修饰符变量名 表达式 变量名 表达式 在一次定义中 可定义一个变量 也可定义多个同类型变量如 inty 4 z intx 4 intx x 4 若初始化数据类型与所定义的变量类型不同 则该数据被转换成与变量类型相同 如intx 3 14 三 字符型数据 1 基本情况见P18表2 22 字符型常量的表示 都须用单引号括起来 P183 字符型变量的定义和初始化 如chara1 a2 w 4 字符型与整型的关系 在计算机内部 字符用代码表示 即整数 因此施加于整数的操作同样可施加于字符 如charx A charx 65 输入输出时 C 输入流和输出流明确区分这两种数据类型如 cout A 和cout 65 分别输出A和65若c为一字符 则用语句cout int c 显示代码若c为一整数 则用语句cout char c 显示字符 四 枚举型数据 1 基本情况见P212 类型定义格式 enum枚举名 符号表 如 enumWEEKDAY Sun Mon Tue Wed Thu Fri Sat 变量定义 WEEKDAYw1 w2 Sat 3 枚举型与整型的关系 一般枚举中的每个符号依次与0 1 2 对应 也可任意规定其对应关系如enumWEEKDAY Sun 1 Mon Tue 4 Wed Thu Fri Sat 利用枚举符号与整数的对应关系 见P22例4 C 输入流与输出流不识别枚举符号 输入输出都为整型数如 WEEKDAYd f Thu cin d cout f 若使d为Mon 应输入1 cout的显示为4 五 实型数据 1 基本情况见P24 注意有效位2 实型常量的表示 常规表示法例 32340科学表示法例 3 234e 4六 符号常量与常值变量 1 用预处理命令 define定义一个符号来代表某个常量如 definePI3 1415不能加分号结尾2 常值变量定义是在一般变量前加上保留字const如 constdoublePI 3 1415注意 常值变量在定义时须初始化 这两者在程序中不能改变初始值如 54 var fun 七 数值表达式 1 无操作符的表达式 简单表达式常量 变量 函数调用是最简单的表达式 每个都有一个值2 算术操作符 除 整除 正号 负号 注意 使用括弧避免两个操作符碰到一起3 位操作符 只针对整数 右移 按位或 分析例k m 8 5 复合赋值操作符 j的值为4注意 1 此操作符只能用于变量 不能用于常量或表达式 如5 或 a b 不合法2 和 的结合方向为自右向左 算术运算符为自左向右 若有 i 相应于 i 非 i 表达式不能增1 若cout i i 3 则输出 3 而后i增值为4 3 连续出现的 或 自左向右总识别为 或 如 i j为 i j非i j 7 sizeof操作符 用于获得一数据或数据类型所占空间的字节数格式 sizeof 类型修饰符 或sizeof 表达式 如 doubled 3 cout sizeof 5 sizeof d 2 sizeof longdouble 8 操作符的优先级和结合性 1 当表达式中有多个操作符时 优先级高的操作符先执行2 一元操作符 赋值及复合赋值操作符具有从右到左的结合性 其它操作符具有从左向右的结合性 见P31第二段3 括弧 具有最高优先级 其作用是强制改变运算顺序4 书写C 表达式的注意事项 P31 9 类型的自动转换与强制转换 1 当与一个操作符相联系的两个操作符的类型不同时 其中的一个操作符的类型将转换成与另一个操作数的类型相同 P32图2 12 类型强制转换格式 类型修饰符 表达式 如 int 3 14 i float j 练习 1 写出程序运行结果 voidmain inti j m n i 8 j 10 m i n j cout i j m n 2 设a 12 写出运算后的a的值a aa 2a 2 3a a aa 5 2 a a a a 八 逻辑型数据与逻辑表达式1 逻辑型数据的基本情况 P35表2 52 逻辑表达式 1 无操作符的逻辑表达式 简单逻辑表达式 逻辑常量 变量 函数2 关系操作符和关系表达式 5 6 73 复合条件 子条件 子条件 两个子条件同时成立时此复合条件才成立 子条件 子条件 两个子条件中至少有一个成立时此复合条件就成立 数轴表示 P37 4 相反条件 逻辑非操作符 用于构成相反条件5 等价条件 见P386 永假条件和永真条件 如x15 永假 x 3 永真 7 逻辑型与其他数据类型的关系 1 逻辑型数据作数值数据使用时 false被转换为0 true被转换为12 非逻辑型数据作逻辑数据时 0为false 非0为true3 用数值数据对逻辑变量进行初始化或赋值时 任何非0值被转换为1如 boolm 3 n n 4 cout m n 结果为11注意 数据型数据与逻辑型数据出现在同一表达式中时 逻辑型数据将转换为相应的数值型数据0或1 例 boolk true intj 3 输出40cout80 10 20九 自定义类型修饰符 格式 typedef类型修饰符说明 例 typedefintqqq qqqi j 等同于inti j 十 表达式的副作用与表达式语句 1 表达式的副作用 求值过程中不但要提取变量的值 还可能改变它们的值 如 表达式i j 具有副作用的操作及相应操作符有 赋值 复合赋值 这些操作所作用的对象须为变量 因此这些操作也称为作用于变量的操作 除后增1和后减1外 作为操作结果的表达式的值是所作用的变量所获得的值 即这些操作的结果仍然是变量对象 而且就是那个被作用的变量 因此当若干个作用于变量的操作施加于同一变量时 除最后一个外 不得有后增1或后减1操作 见P44如 k 错误 k 正确2 表达式副作用的应用 逗号操作符与逗号表达式 格式 表达式1 表达式2 逗号表达式的值为表达式2的值 例 a 3 5 6 8 a 14a 3 5 6 8 a 3 5 6 8 注意括弧可扩展为表达式1 表达式2 表达式n 表达式的值为表达式n的值3 表达式副作用的应用 表达式语句在表达式后加分号后成为表达式语句 无副作用的表达式语句无意义见P45例子 第三章C 程序的流程控制 学习目标 本章主要介绍程序的三种基本控制结构 顺序结构 条件结构和循环结构 掌握if switch for while do while break contiue语句 一 流程控制与程序结构 特点 只有一个入口和一个出口1 顺序结构 按语句先后顺序依次执行2 条件分支结构 由特定的条件决定执行某个语句3 循环结构 由特定的条件决定某个语句重复执行次数的控制方式二 条件分支结构 1 if语句 格式if 条件 语句1 else语句2 功能 若条件1成立 则执行语句1 否则语句2 若无可选项 则在条件不成立时什么都不做 注意 A 条件通常为一逻辑表达式 若条件成立该表达式值为true 否则为false 若条件不是一逻辑表达式 则一切0值被转换为false 一切非0值转换为trueB 语句1 语句2可是基本语句 也可为复合语句 但不能不是语句或多个语句 见书P532 if语句的嵌套 if语句中又包括一个或多个if语句从遇见的第一个else开始 else总与离它最近的if配对 否则应用 把嵌套的关系表达得更明确一些 一般形式 if 条件1 if 条件2 语句1else语句2elseif 条件3 语句3else语句4若写成 if 条件1 if 条件2 语句1elseif 条件3 语句2else语句3问题 else与第一个if写在同一列上 两者对应否 例 y 1 x0 判断下列写法的正确性1 if x 0 elseif x 0 y 0 if x 0 y 1 elsey 1 elsey 0 elsey 1 3 y 1 4 y 0 if x 0 if x 0 if x 0 y 1 if x 0 y 1 elsey 0 elsey 1 例 见P55 573 13 23 33 43 if多分支结构 规范化的if嵌套所构成的条件分支结构形式 P60 61例3 6 4 switch语句和switch多分支结构 格式 switch 整型表达式 case整型常量表达式1 语句序列1case整型常量表达式2 语句序列2 case整型常量表达式k 语句序列k default 语句序列k 1 1 表达式类型若不是整型 自动转换为整型 整型常量表达式通常为一个常数 每一个常量值必须不同 2 从case入口进入到一个语句序列 就从该序列开始顺序执行 直到以下所有语句序列执行完毕为止 语句序列可为空 3 在语句序列后加break语句是提前结束switch语句的执行例P633 7 3 8 三 循环结构 循环体为一基本语句或一复合语句1 for循环 先判断后执行格式 for 循环初始化 循环条件 循环参数调整 循环体功能 见P67图3 10 如 for inti 0 i 100 i cout i 1 循环初始化可省略 注意其后的分号不能省 此时应在for语句之前给循环变量赋初值 如for i 100 i cout i 2 循环条件省略意味着永真条件 若不在循环体中用break强制退出 将形成死循环 若省略注意其后的分号不能省 如for inti 0 i cout i 3 循环参数调整可省略 但应另外设法保证循环正常结束如 for inti 0 i 100 cout i i 4 若只有循环条件 此时完全等同于while语句for i 100 while i 100 cout i i cout i i 5 三个都省略 如for 语句相当于whlie 1 语句 6 循环体为空语句 可用于延时 如for inti 0 i 100 i 例 求1 2 100 1 2 3 100 1 1 2 1 4 1 6 1 20P683 9 3 102 while循环 先判断后执行 一切用for语句实现的循环也可用while语句实现格式 while 循环条件 循环体功能 见P71图3 11 例 求1 2 100P71例3 12 3 do while循环 先执行后判断格式 do循环体while 循环条件 功能 见P75图3 12注意 循环条件后的分号例 求1 2 1004 几种循环的比较 1 三种循环都可用来处理同一问题 一般可互相代替 2 while和for循环是先判断后执行 而do while是先执行后判断 其循环体至少执行一次 3 用while和do whlie循环时 循环变量初始化应在之前完成 而for语句可同时进行 4 while和do whlie循环在while后指定循环条件 参数调整一般在循环体中进行 5 循环结构的特殊控制 break和continue语句 1 break语句功能是强制退出循环 该语句的执行是有条件的 通常以if break 或if break 形式在循环体中使用如 for r 1 r100 break break不能用于循环语句和switch语句之外的任何其它语句中 2 continue语句功能是提前结束本轮循环体的执行 即跳过循环体中下面尚未执行的语句 接着进行下一次是否执行循环的判定 如 for n 100 n 200 n 把100 200之间的不能 if n 3 0 continue 被3整除的数输出cout n 例 见P77例3 16四 其他流程控制 1 goto语句 可无条件转移到指定标号处标号定义格式标号 语句转移到指定标号的格式goto标号 2 return语句 用于结束函数的运行并返回调用处格式 return 表达式 对于无返回值的函数 即说明为voidF 的函数 F为任意函数名 可使用return 对于有返回值的函数 须用return表达式 来结束函数的运行 并把表达式的值返回到调用处 第四章数组 学习目标 本章主要介绍数组 下标 数组元素 单元 类型等概念 数组定义和初始化的格式 讨论数组的应用 字符串处理 熟悉常用的字符串处理函数 数组 可通过下标访问的同类型数据元素的集合 每个元素相当于一简单变量 是一个存储单元 数组的数据类型就是其元素的数据类型 一 一维数组 元素线性排列 用下标0 1 2 标识1 一维数组的定义和初始化 格式 1 类型修饰符数组名 元素个数 2 类型修饰符数组名 元素个数 初值表 说明 初值表是用逗号隔开的常量表达式 可包括常量和符号常量 不能为变量 若省略元素个数 则由初值表中常量个数决定 如 chara 80 无初始化intd 1 2 3 4 对全部元素赋值时 可不指定数组长度intd 5 1 2 3 可只给一部分元素赋值2 数组元素的引用 数组名 下标 下标通常为一整型表达式 若不为整型 强制转换为整型 若数组元素个数为n 则最大下标是n 1 最小下标为0 数组元素在内存中是顺序排列 见P88输出应一个个元素输出 不能cout 数组名3 举例 P88例4 1 4 2二 多维数组 1 二维数组的定义和初始化 格式 1 类型修饰符数组名 行数 列数 2 类型修饰符数组名 行数 列数 初值表 初值表 如 floatd 4 5 无初始化intnum 3 1 3 4 0 2 4 6 省略行数 功能是定义一3行3列整型数组且初始化 数组行数由初值表个数决定 inta 2 3 1 2 3 4 直接给出元素值 而非每行的初值表2 二维元素的引用 格式 数组名 行下标 列下标 如 num 2 3 6 注意 下标值应在已定义的数组大小范围内 若数组为n行m列 则行下标是0 n 1 列下标是0 m 1 常出现的错误如 inta 3 4 a 3 4 7 二维元素在内存中排列顺序是 按行存放 即先顺序存放第一行的元素 再存放第二行的元素 3 举例 输入一个5 5矩阵 再原样输出将一个二维数组行列互换 存到另一个二维数组中求3 4矩阵中值最大的元素以及其所的行号和列号 P96例4 5 4 6三 字符数组与字符串 1 一维字符数组与字符串 字符串是一个以 0 结尾的字符序列 其长度为字符个数 不含结束符 因此长度为n的字符串需n 1个字节的存储空间 字符串常量用双引号括起来 用来存放字符串的数组为字符数组 其一个元素存放一个字符 其初始化可更简略 chars1 a b c 0 chars2 abc 一维字符数组一般不使用下标 可直接通过数组名访问其中的字符串 如cout s1 s2 2 二维字符数组与字符串 可把二维字符数组作为一维字符数组使用 可像通常的一维数组那样通过下标访问数组中指定的字符串 charwd 4 sun mon tue wed thu fri sat 定义了7行6列的字符数组 全部初始化 注意行数由初始化数据的个数决定 列数不得小于最长的初始字符串的长度加1 若cout wd 4 则将输出thu3 字符串的主要操作 见P1014 举例 P103例4 8输入一行字符 统计单词数量 单词间用空格分开 第五章C 函数 学习目标 掌握函数定义和函数调用的方法 会使用函数原形和头文件 掌握通过传值方式向函数传递数据的方法和使用数组参数 可选参数 掌握函数重载和设计函数模板的方法 了解函数和变量作用域 一 函数的定义 1 格式 类型修饰符函数名 形式参数表 函数体函数据有无形式参数分为有参函数和无参函数两类据其返回值分为有返回值函数和无返回值函数两类2 对于有返回值函数 必须用类型修饰符说明返回值类型 且在函数体中用return表达式 结束函数的运行 对于无返回值函数 必须用void作类型修饰符 因此无返回值的函数也称为void函数 且在函数体中可用或不用return 来结束函数的运行 见P111的两个例子 二 函数的调用 1 函数调用格式及调用方式 格式 函数名 实在参数表 1 实参表是一系列用逗号分开的实在参数说明 实参为一表达式 不含操作符的简单表达式或含操作符的复杂表达式 在数量和类型上应与函数定义中的形式参数表一致 2 函数调用方式 A 作为表达式调用 如 area Area 3 被调用函数须有返回值B 作为语句调用 如 Area 3 不要求被调用函数有返回值 只要求函数完成一定操作 2 函数的递归调用 直接或间接地调用自身 三 函数原形与头文件 1 函数原形格式 类型修饰符函数名 形式参数表 功能 提供函数调用所需的接口信息2 在函数定义格式的基础上去掉了函数体 函数原形能提供的信息函数定义也能提供 3 函数必须先说明后使用 若函数定义于函数调用之前 就不必另行给出函数原形 反之若定义于函数调用之后 则函数原形必须位于对该函数的第一次调用处之前 见P117例4 在应用系统中 无论函数定义是否已出现在调用之前 都在程序前部给出函数原形 见P1185 系统提供的标准函数是以目标程序形式提供 其原形分别保存在若干头文件中 头文件也可保存用户自己定义的函数的原形 6 函数定义与调用位于不同的程序文件中时 定义的函数的原形保存在头文件中 见P119 四 函数调用中的参数传递 1 值传送 是基本方式 将实参的值传递给被调用的对应形参变量 形参不能影响实参 为单向传递 见P122例2 数组参数 1 数组元素做函数实参 值传送方式 2 数组名作函数参数 为地址传递方式 即双向传递 此时实参与形参都应用数组名 A 说明一维数组参数时 可不限定元素的个数以提高函数的通用性 但须以单独的数组名作为实在参数 形参数组不指定大小 在定义时数组名后跟一空方括弧 但须设另一参数传递元素个数 见P123B 说明多维数组时 数组名为实参 形参数组中第一维的大小可不指定 但其余各维须加以指定 见P124例 3 可选参数 说明函数时可为形参表中的最后的若干参数设定默认值 从而把这些参数说明为可选参数 在调用此函数时 若没有给出对应于可选参数的实参 系统自动以默认值作为实参传递给函数 注意被省略的只能是最后的连续的若干可选参数 可选参数应在函数原形中进行说明 可选参数的说明格式 类型修饰符变量名 默认值五 函数重载与名字混成 1 函数重载 允许定义同名的函数 但重载的函数必须在参数的数量上或类型上与其他同名函数有所不同 通过重载 可实现用相同接口调用具有类似功能的若干函数 如 longaa longa longb returna b doubleaa doublea doubleb returna b 都可用aa a b 这样统一的调用形式获得所需要的结果 2 为区分同名的不同函数 编译系统用名字混成的方法生成内部函数名 即包括外部函数名和函数的参数信息 六 函数和变量的作用域 1 函数的作用域 一般函数的作用域是全局的 定义它的文件及在同一应用系统的其他程序文件都可调用 若仅仅提供给同一程序文件中的函数调用 用static说明 如 staticintaa inta returna 2 变量的作用域和生存期 作用域 全局变量和局部变量 生存期 静态变量 程序运行间分配固定的存储空间 和动态变量 动态分配存储空间 A 全局变量 定义于函数外部的变量 可为本源程序文件中其它函数所共用 作用域为从定义变量的位置开始到本源文件结束 是静态变量 若定义时未初始化 则自动被初始化为0 若全局变量定义于要访问它的函数之后或需引用其他程序文件中的全局变量 则须用extern说明 如 externinta B 局部变量 定义于函数内部的变量 其作用域为本函数内 之外不能使用 不同函数可使用相同名字的变量 互不干扰 若与全局变量同名 则在局部变量作用域内 全局变量不起作用 可用auto static register对局部变量进行存储类型修饰auto 自动变量 动态变量 autointa autoa inta static 静态变量 适用于函数需在本次调用与下次调用间交换信息 在函数调用后而保留原值 即其占用存储单元不释放 在下一次函数调用时该变量已有值 就是上一次调用结束时的值 见P133例register 寄存器变量 需要时直接从运算器中的寄存器中取出 不必到内存中去存取 提高执行效率 第六章指针 引用和动态空间管理 学习目标 掌握定义各种指针的方法及基本操作 掌握利用指针访问数组元素 传递数据参数和函数参数的方法 掌握利用引用传递数据参数 利用指针操纵动态空间 一 指针的概念和指针变量的定义 1 指针概念 指明数据存储位置的地址 指针的类型就是指针所指向的数据的类型 当指针不指向任何数据时则称为空指针 其地址值为0 可用NULL表示 2 指针变量 专门用于存放地址的变量 定义格式 类型修饰符 变量名 指针表达式 见P146例二 指针的基本操作 指针移动 指针表达式的副作用 指针类型的强制转换 指针操作符的综合运用 结合方向为从右到左 三 指针与数组 1 一维数组元素的指针访问方式 1 数组名是指向该数组第1个单元 即0号元素例 inta 10 则数组名a的类型为int 且指向a 0 2 访问数组元素的两种方式 下标方式和指针方式如 a i 等同于 a i 特别是a 0 等同于 a例 输出数组全部元素 方法用三种 3 指向一维数组第1个单元的任何指针都可像一维数组名那样使用 如 inta 10 pp a 则 pp i 与pp i 访问的是同一个元素a i 见P156例及注意事项2 二维数组元素的指针访问方式 1 二维数组可看成具有若干个单元 行数 的一维数组 其中的每个单元本身又是一个具有若干单元 列数 的一维数组 如 intb 6 8 b 0 b 5 就是6个顺序存储且规格相同的一维数组 每个一维数组具有8个元素 数组名b的类型为int 8 且指向二维数组b的首行 等价转换关系 P157 2 指向二维数组首行的任何指针可像二维数组名那样使用 如 intb 10 20 pp 20 b 则 pp i j 和pp i j 访问的是同一个元素b i j 3 指向数组的指针 1 与数组名等价的指针为指向数组的指针 其目的是该指针能代替数组名访问该数组的元素 理解见P159 2 定义指向一维数组的指针变量的格式 类型修饰符 变量名 一维数组名 如 inta 10 pp a 定义指向二维数组的指针变量的格式 类型修饰符 变量名 列数 二维数组名 如 intb 2 3 pp 3 b 在函数的形参表中定义指向数组的指针 还可采用如 intpp a intpp 3 b 4 字符指针与字符串 在C 中 可用两种方法实现一个字符串A 用字符数组实现 如 chars1 string1 cout s1 S1为数组名 代表字符数组的首地址B 用字符指针实现 如 char s2 string1 cout s2 定义s2为字符指针变量 并把字符串首地址赋给它 即指向该字符串 注意事项 见P160例 将字符串a复制到字符串b中 P160例6 2 6 3 5 指针数组 数组的每个元素是一个指针 与定义一般数组相比 只是在数组名前多一个 号 如 int ip 10 注意不是int ip 10 此为指向一维数组的指针变量常见应用是构造字符串符号表 见P162例四 指针与函数 函数参数不仅可以是整型 实型 字符型等数据 还可以是指针类型 它的作用是将一个变量的地址传送到另一个函数中 1 指针参数 传值 是C 传递参数的基本方式 指针参数作函数参数也一样 调用函数不能改变实参指针变量的值 但可改变实参指针变量所指向的数据 通过指针参数的传递 形参指针和实参指针指向同一数据 因此通过形参指针就改动实参指针所指向的数据 即地址传送方式 例 将输入的两整数按从大到小的顺序输出 总结 若想通过函数调用得到n个要改变的值 可以A 在主调函数中设n个变量 用n个指针变量指向它们B 用指针变量作实参 将变量地址传给被调用函数的形参C 通过形参指针变量改变该n个变量的值D 主调函数中就可使用这些改变了值的变量2 数组参数实际上是指针 对数组参数的说明 形式上是在说明数组 实际上是在说明指向数组的指针 实参数组和对应的形参数组实际上是指向同一数组空间的两个指针 因而对形参数组的任何改变也就是对实参数组的改变 若有一个实参数组 想在函数中改变此数组的元素的值 实参与形参的对应关系有以下4种情况 A 形参和实参都用数组名B 实参用数组名 形参用指针变量 main f intx intn f int x intn inta 10 f a 10 C 实参与形参都用指针变量D 实参为指针变量 形参为数组名main f int x intn f intx intn inta 10 p p a f p 10 例 将a数组中n个整数按相反顺序存放2 指针函数 返回指针值的函数 格式见P1713 函数指针 指向函数的指针 五 引用 为一个变量 函数等对象规定一个别名 此后任何施加于这个别名上的操作都如同直接施加于别名所代表的对象一样 格式及例子见P175六 动态空间管理 动态空间 在程序运行时动态地取得和释放的数据空间管理动态空间的操作符 new 申请 delete 释放 1 非数组动态空间 new使用格式及delete使用格式见P1802 数组动态空间 new使用格式及delete使用格式见P181 有关指针的数据类型和指针运算的小结一 数据类型 inti 定义整型变量iint p p为指向整型数据的指针变量inta n 定义整型数组a 它有n个元素int p n 定义指针数组p 它由n个指向整型数据的指针元素组成int p n p为指向含n个元素的一维数组的指针变量intf f为带回整型函数值的函数int p p为带回一个指针的函数 该指针指向整型数据 指针函数 int p p为指向函数的指针 该函数返回一个整型值 函数指针 int p p为指针变量指向一个指向整型数据的指针变量 二 运算小结 1 指针变量加减一个整数 如 p p p i p i p i p I功能 将该指针变量的地址和它指向的变量所占用的内存字节数相加减2 指针变量赋值 将一个变量地址赋值给一个指针变量p i个元素p max 函数max入口地址p1 p2 都为指针变量注意 不能将一整数赋给指针变量 如 p 100 也不能把指针变量p的值赋给一个整型变量3 两个指针变量可以相减p1 p2若都指向同一数组的元素 则p2 p1为两个指针之间的元素个数 p1 p2无实际意义 4 两个指针变量的比较 若两个指针指向同一个数组的元素 则可比较 指向前面的元素的指针变量小于后面元素的指针变量 即p1 p25 指针变量可以有空值 即不指向任何变量表示形式 p NULL 注意与未对p赋值是两个不同概念 前者有值 为0 后者的值为一不确定值 即p实际上可能指向一个事先未指定的单元 因此在引用指针变量之前应对它赋值 void指针类型 即可定义一个指针变量 但不指定它是指向哪一种类型数据 第七章结构与联合 学习目标 掌握结构和联合类型的定义 对象的定义和初始化 对象成员的直接访问和间接访问 利用结构构造链表 对结构的操作符重载函数的定义与调用 以结构作为函数参数和返回值类型的使用 一 结构的定义 1 结构是用户自定义的类型 在其中定义的每个变量称为数据成员 每个函数称为函数成员或成员函数 统称为该类型的成员 结构大小为各成员的大小之和 用户自定义类型还包括联合和类 2 结构是将不同类型的数据组合成一个有机的整体 这些数据是相互联系的 如 P195人的结构体类型定义3 定义格式 举例 P195 P196 二 结构变量的定义和初始化 结构类型定义后 就可利用它在其作用域内定义变量并进行必要的初始化 定义格式有三种1 用结构类型名定义变量 2 定义结构类型的同时定义变量P198 2013 定义无名结构类型的同时定义变量4 说明 A 类型与变量是不同的概念 对结构体变量来说 先定义一个结构体类型 再定义变量为该类型 只能对变量赋值 存取或运算 而不能对一个类型操作 在编译时只对变量分配空间 B 对于成员 可单独使用 相当于普通变量 成员也可为一个结构变量 成员名在该类型中须唯一 但可与程序中的变量名相同 二者不代表同一对象 C P197第5点 三 结构成员的访问操作 对结构变量所提供的运算符有三种 A 赋值运算符格式 两边为同类型的结构变量B 直接成员 点 运算符格式 结构变量 成员如 x a代表x中的成员变量aC 间接成员 箭头 运算符格式 结构指针变量 结构指针变量所指结构中的一个成员如 structstudent1x structstudent1 p p 则p a表示p指针所指结构中的成员变量a等价关系 p a p a x a注意 p a中的 p不能少括号 因 运算符优先于 不能将一个结构变量作为一个整体进行输入和输出 但可将一个结构变量直接赋值给另一个具有相同结构的结构变量 若成员本身又属一个结构类型 只能对最低级的成员进行操作 如 有以下结构定义structdate intmonth intday intyear structstudent intnum charname 20 charsex intage structdatebirthday charaddr 30 student1 可这样访问各成员 student1 numstudent1 namestudent1 birthday monthstudent1 birthday day例 例7 1 7 2 四 结构与函数 结构能使用在简单类型允许使用的所有地方 也允许作为函数的函数参数类型和返回值类型 五 结构与链表 结构中除包括一般的数据域外 还可包括一个指向本身类型的指针数据成员 这种类型的对象又称为结点 每个结点的指针域用来指向下一个结点 由此形成一个链表 从指向表头结点的指针出发可依次访问到该链表中的每一个结点 六 结构与操作符重载 对结构的操作符只有 三种 若需对结构对象进行算术等操作 可用常规函数处理 或按照操作符重载函数的定义规则定义相应的操作符重载函数 对用户类型进行一种操作符重载后 在表达式中可对这

温馨提示

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

评论

0/150

提交评论