C语言程序设计ch.ppt

上传人:max****ui 文档编号:6333549 上传时间:2020-02-23 格式:PPT 页数:56 大小:412.50KB
返回 下载 相关 举报
C语言程序设计ch.ppt_第1页
第1页 / 共56页
C语言程序设计ch.ppt_第2页
第2页 / 共56页
C语言程序设计ch.ppt_第3页
第3页 / 共56页
点击查看更多>>
资源描述
第七章指针 2020 2 23 C与C 程序设计教程 第七章 2 7 1变量和地址7 2指针变量7 3指针与数组7 4指针与函数7 5指针与结构 退出 指针的作用 可以使程序简洁 紧凑 高效 有效地表示复杂的数据结构 动态分配内存 得到多于一个的函数返回值 2020 2 23 C与C 程序设计教程 第七章 3 地址 一个变量名代表内存中的一个存储单元 每个存储单元都有一个编号 这就是 地址 7 1变量和地址 房间 变量名房客 变量值房间号 地址 编译或函数调用时为变量分配内存单元 内存中每个字节有一个编号 地址 变量是对程序中数据存储空间的抽象 返回 2020 2 23 C与C 程序设计教程 第七章 4 7 2指针变量 7 2 1指针变量的概念7 2 2指针变量的定义形式7 2 3指针变量的运算7 2 4指针变量的初始化 返回 2020 2 23 C与C 程序设计教程 第七章 5 指针 一个变量的地址 指针变量 专门存放另一变量地址的变量 2000 指针 指针变量 变量的内容 变量的地址 inti pi i 10 pi 7 2 1指针变量的概念 返回 2020 2 23 C与C 程序设计教程 第七章 6 存储类型 数据类型 指针变量名 inti j pi pj floatf float pf 7 2 2指针变量的定义形式 合法标识符 指针变量本身的存储类型 表示定义指针变量不是 运算符 注 1 int p1 p2 指针变量名是p1 p2 不是 p1 p2 2 指针变量只能指向定义时所规定类型的变量 3 指针变量定义后 变量值不确定 应用前必须先赋值 指针的目标变量的数据类型 返回 2020 2 23 C与C 程序设计教程 第七章 7 7 2 3指针变量的运算 取变量的地址 单目运算符 优先级为2 右结合性 取指针变量所指地址中的内容 与 为互逆运算 单目运算符 优先级为2 右结合性 例 i 5 pi 例 j pi 相当于j i pi i pi i pi i 2020 2 23 C与C 程序设计教程 第七章 8 例7 1 指针的运用 main inti j int pi pj i 2 j 4 pi 2020 2 23 C与C 程序设计教程 第七章 9 运行输出 x 6 y 9MAX 9 MIN 6 6 2006 9 2008 2006 2008 2006 例7 2 输入x y两个整数 按先大后小的顺序输出x y main intx y px py p scanf d d 运行输入 69 2020 2 23 C与C 程序设计教程 第七章 10 指针的赋值运算 例 pi 地址值4000 pz 2020 2 23 C与C 程序设计教程 第七章 11 指针的算术运算 例p指向float数 则p 1 p 1 4 例p指向int型数组 且p 则p 1指向a 1 例inta 10 int p 例inta 10 int p1 1 若p 有p n i sizeof i np p p n p n p n p n的含义若p1与p2指向同一数组 p1 p2 两指针间元素个数 p1 p2 sizeof i p1 p2无意义 2020 2 23 C与C 程序设计教程 第七章 12 指针的关系运算 表示其所指向的存储单元的相对位置 若px和py指向同一数组 则pxpy表示p1指的元素在后px py表示p1与p2指向同一存储单元px 0表示px为空指针 p NULL若p1与p2不指向同一数组 比较无意义 2020 2 23 C与C 程序设计教程 第七章 13 例7 3 求字符串的实际长度 main chars 256 char p scanf s s p s while p 0 p printf Thestringlengthis d n p s 返回 2020 2 23 C与C 程序设计教程 第七章 14 赋给指针变量 不是赋给目标变量 例inti int p 变量必须已说明过类型应一致 例int p 例inti int p 用已初始化指针变量作初值 例main intx staticint p 不能用auto变量的地址去初始化static型指针 7 2 4指针变量的初始化 一般形式 存储类型 数据类型 指针名 初始地址值 返回 2020 2 23 C与C 程序设计教程 第七章 15 7 3指针与数组 7 3 1指向数组的指针7 3 2字符指针与字符数组7 3 3多级指针及指针数组7 3 4指针与多维数组 返回 2020 2 23 C与C 程序设计教程 第七章 16 7 3 1指向数组的指针 例inta 10 p p a p 2020 2 23 C与C 程序设计教程 第七章 17 数组元素的四种表示方法 a i p i p i a i 区别 数组名a是地址常量 不可实现其自身的改变 如a 或 a非法 而数组指针p是地址变量 p 和 p合法 2020 2 23 C与C 程序设计教程 第七章 18 例7 5 对数组元素的访问 main inta 10 inti p for i 0 i 10 i scanf d 2020 2 23 C与C 程序设计教程 第七章 19 例7 7 使用指针变量举例 include stdio h inta 0 1 2 3 4 main inti p for i 0 i 4 i printf d t a i putchar n for p 0123401234123425637024 返回 2020 2 23 C与C 程序设计教程 第七章 20 7 3 2字符数组与字符指针 main staticchars1 IloveChina printf s n c t c n s1 s1 0 s1 3 字符串表示形式 字符数组方式 例7 9 IloveChina Io 2020 2 23 C与C 程序设计教程 第七章 21 字符指针方式 例7 10 main char s2 IloveChina char s3 c char s4 w s3 字符指针初始化 把字符串首地址赋给string char s2 s2 IloveChina LoveChina Hw H 2020 2 23 C与C 程序设计教程 第七章 22 例7 11 用数组将字符串a复制到字符串b main chara Iamaboy b 20 inti for i 0 a i 0 i b i a i b i 0 printf Stringais s n a printf Stringbia s n b Stringais Iamaboy Stringbis Iamaboy 2020 2 23 C与C 程序设计教程 第七章 23 例7 12 用指针变量将字符串a复制到字符串b Stringais Iamaboy Stringbis Iamaboy main chara Iamaboy b 20 p1 p2 inti p1 a p2 b for p1 0 p1 p2 p2 p1 p2 0 printf Stringais s n a printf Stringbis s n b 例7 13 复制字符串 main chara Iamaboy b b a printf Stringais s n a printf Stringbis s n b 2020 2 23 C与C 程序设计教程 第七章 24 使用字符数组与字符指针要注意 1 对字符数组整体赋值只能在初始化时进行 而对指针变量赋值 既可在初始化时进行 又可在其他地方赋值 2 str是地址常量 cp是地址变量 cp接受键入字符串时 必须先开辟存储空间 例charstr 10 scanf s str 而char cp scanf s cp 改为 char cp str 10 cp str scanf s cp char cp charstr 20 charstr 20 str IloveChina char cp cp IloveChina 返回 2020 2 23 C与C 程序设计教程 第七章 25 多级指针 指向指针的指针 一级指针 指针变量中存放目标变量的地址 二级指针 指针变量中存放一级指针变量的地址 存储类型 数据类型 指针名 7 3 3多级指针及指针数组 多级指针 定义指针变量时 标识符前有多少个 即表示多少级指针变量 例三级指针int p 四级指针char p 2020 2 23 C与C 程序设计教程 第七章 26 例7 14 多级指针举例 main int p i int pp i 54 p 654985465498546549665496654985465500 2020 2 23 C与C 程序设计教程 第七章 27 指针数组 数组中的元素为指针变量 用于处理二维数组或多个字符串 存储类型 数据类型 数组名 数组长度说明 注 1 static和extern型指针数组才可初始化 2 不能用自动型变量的地址去初始化static型指针数组 例int p 6 长度为6的指针数组 int p 6 指向一个长为6的数组的指针变量 2020 2 23 C与C 程序设计教程 第七章 28 例7 15 指针数组举例 main staticinta 5 2 4 6 8 9 staticint num 5 24689 2020 2 23 C与C 程序设计教程 第七章 29 例7 16 按英文字典的字母顺序对多个字符串进行程序排序 include string h main staticchar name Ada FORTRAN Pascal BASIC C FoxBASE intn 6 inti j gap char temp for gap n 2 gap 0 gap 2 for i gap i 0 j if strcmp name j name j gap 0 break temp name j name j name j gap name j gap temp for i 0 i n i printf s n name i AdaBASICCFORTRANFoxBASEPascal 返回 2020 2 23 C与C 程序设计教程 第七章 30 7 3 4指针与多维数组多维数组的地址 对于一维数组 数组名a表示数组的首地址 即 a 0 数组名a是地址常量 a i是元素a i 的地址 即 a i a i a i 对于二维数组 a是数组名 包含三个元素a 0 a 1 a 2 每个元素a i 又是一个一维数组 包含4个元素 inta 3 4 行指针与列指针 对二维数组inta 3 4 有a 二维数组的首地址 即第0行的首地址a i 第i行的首地址a i a i 第i行第0列的元素地址a i j a i j 第i行第j列的元素地址 a i j a i j a i j a i a i a i a i a i 0 值相等 含义不同a i a i 表示第i行首地址 指向行a i a i a i 0 表示第i行第0列元素地址 指向列 二维数组元素表示形式 1 a 1 2 2 a 1 2 3 a 1 2 4 a 0 0 1 4 2 地址表示 1 a 1 2 a 1 0 3 a 1 4 a 1 5 int a 1 地址表示 1 a 1 2 2 a 1 2 3 a 1 2 4 a 0 0 1 4 2 2020 2 23 C与C 程序设计教程 第七章 34 2020 2 23 C与C 程序设计教程 第七章 35 例7 17 多维数组与指针 defineFORMAT d d n main staticinta 3 4 1 3 5 7 9 11 13 15 17 19 21 23 printf FORMAT a a printf FORMAT a 0 a 0 printf FORMAT 404 404404 404404 404412 412412 412420 420420 4209 9 2020 2 23 C与C 程序设计教程 第七章 36 多维数组的指针 指向多维数组元素的指针变量 例7 18 用指针访问多维数组元素 inta 3 3 1 2 3 4 5 6 7 8 9 int pa 3 a 0 a 1 a 2 int p a 0 main inti for i 0 i 3 i printf d t d t d n a i 2 i a i a i i for i 0 i 3 i printf d t d n pa i p i 311545779114273 返回 2020 2 23 C与C 程序设计教程 第七章 37 7 4指针与函数 7 4 1函数参数为指针7 4 2函数的返回值为指针7 4 3指向函数的指针7 4 4命令行参数 返回 7 4 1函数参数为指针特点 地址传递 共享内存 双向 传递 指针作函数参数 main intx y scanf d d 例 将数从大到小输出 普通参数 7 10 7 7 10 COPY 值传递 710 main intx y int p1 p2 scanf d d 7 10 2000 2002 7 10 COPY 7 例7 19 将数从大到小输出 指针参数 地址传递 710 2020 2 23 C与C 程序设计教程 第七章 40 函数返回多个值 指针能保留函数执行时的某种结果 可与return一起构成多个值返回 例7 20 将字符串t复制到s中 并返回被复制的字符个数 intstrcpy s t char s t inti i 0 while s t 0 s t i return i main intn char ss tt gets ss scanf s ss n strcpy ss tt printf d s n tt 返回 2020 2 23 C与C 程序设计教程 第七章 41 7 4 2函数的返回值为指针 函数定义形式 数据类型 函数名 形参表 函数体 例7 21 在一个字符数组中查找一个给定的字符 如果找到则输出该字符开始的字符串 否则输出 NOFOUNDTHISCHARACTER include stdio h main chars 80 p ch match gets s ch getchar p match ch s if p printf thereisthestring s n p elseprintf NOFOUNDTHISCHARACTER n char match c s charc s intcount 0 while c s count 输入 wertypooypiy输出 thereisthestring ypooypi 返回 2020 2 23 C与C 程序设计教程 第七章 42 7 4 3指向函数的指针函数指针 指向函数的指针 把一个函数名赋给指针变量时 指针变量的内容就是该函数在内存存储区域的首地址 定义形式 数据类型 指针变量名 intf1 普通函数的说明 int f2 表示f2 函数返回值为指向int的指针 int f3 表示f3为指向函数的指针变量 该函数 返回一个整型量 2020 2 23 C与C 程序设计教程 第七章 43 例7 22 函数在函数间的传递 include stdio h include string h main intstrcmp chars1 80 s2 80 int p p strcmp gets s1 gets s2 check s1 s2 p check a b cmp char a b int cmp printf testingforequality n if cmp a b printf equal n elseprintf notequal n 输入 tyuuiuihfdg输出 testingforequalitynotequal 2020 2 23 C与C 程序设计教程 第七章 44 include stdio h include string h include stdlib h include ctype h main intstrcmp numcmp chars1 80 s2 80 printf pleaseinput2strings n gets s1 gets s2 if isalpha s1 check s1 s2 strcmp elsecheck s1 s2 numcmp numcmp a b char a b if atoi a atoi b return 0 elsereturn 1 check a b cmp char a b int cmp printf testingforequality n if cmp a b printf equal n elseprintf notequal n 输入 456456输出 testingforequalityequal 例7 23 检查输入数字或字符串的相等性 2020 2 23 C与C 程序设计教程 第七章 45 例 用函数指针变量作参数 求最大值 最小值和两数之和 返回 2020 2 23 C与C 程序设计教程 第七章 46 7 4 4命令行参数命令行 在操作系统状态下 为了实现某种工作而键入的一行字符 一般形式 命令名参数1参数2 参数n main argc argv intargc char argv 命令行参数传递 带参数的main函数形式 C compfile1file2 有3个字符串参数的命令行 命令行中参数个数 元素指向命令行参数中各字符串首地址 形参名任意 第一个参数 main所在的可执行文件名 2020 2 23 C与C 程序设计教程 第七章 47 例7 24 在程序中输出命令行参数的内容 tang c main argc argv intargc char argv inti printf argc d n argc printf commandname s n argv 0 for i 1 i argc i printf Argument d s n i argv i 1 编译 链接tang c 生成可执行文件tang exe 2 在DOS状态下运行 tang exe所在路径下 例 C TC tang exe dddhope argc 3Commandname C TC tang EXEArgument1 dddArgument2 hope 返回 2020 2 23 C与C 程序设计教程 第七章 48 7 5指针与结构体 7 5 1结构体指针与指向结构体数组的指针结构体指针的定义结构体指针的使用结构体的自使用与链表7 5 2结构体指针与函数指向结构体数组的指针结构体指针与函数 返回 2020 2 23 C与C 程序设计教程 第七章 49 7 5 1结构体指针与指向结构体数组的指针结构体指针 指向结构体的指针 指向结构体变量的指针变量 用于保存结构体存储空间的首地址 结构体指针的定义struct结构体类型名 结构体指针变量名 structstudent lontintnum charname 20 charsex st structstudent p p 返回 2020 2 23 C与C 程序设计教程 第七章 50 1 结构体指针变量可以加减1 跳过的所指结构体类型的长度 2 结构体指针变量可以做函数的参数或返回值 3 指向相同结构体类型的指针变量可以组成一个数组 即结构体指针数组 4 结构体成员的访问有三种方式 结构体变量名 成员名 结构体指针变量名 成员名结构体指针变量名 成员名 结构体指针的使用 2020 2 23 C与C 程序设计教程 第七章 51 structstudent intnum charname 20 charsex st 2001 LiMing M 2002 Wangfang F 2003 ZhangRong M main inti structstudent p p 例7 26 使用结构体指针访问结构体的成员 2001 LiMing M2002 Wangfang F2003 ZhangRong M 返回 2020 2 23 C与C 程序设计教程 第七章 52 结构体的自使用与链表结构体的自使用 结构体的成员是指向其自身的结构体指针变量 一般形式 structnode intdata structnode next 2020 2 23 C与C 程序设计教程 第七章 53 例7 27 建立一条链 数据从键盘读取 链的首结点由head返回 输入 12345输出 54321 返回 2020 2 23 C与C 程序设计教程 第七章 54 7 5 2结构体指针与函数结构体指针作函数的参数 例7 28 structs inti charc st 125 A main printf Theolddata n printf ti d tc c n st i st c sub 输入 Theolddata i 125c A输出 Thenewdata i 2c B 返回 2020 2 23 C与C 程序设计教程 第七章 55 函数返回值为结构体指针 例7 29 定义形式 struct结构体类型名 函数名 形式参数表 形式参数表说明 函数体 structs inti charc sp main structs sub sp sub printf Thedata n printf i d tc c n sp i sp c structs sub char malloc structs sv sv structs malloc sizeof structs sv i 5 sv c B return sv Thedata i 5c B 返回 2020 2 23 C与C 程序设计教程 第七章 56 Thankyou
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!