C语言程序设计经典教程cla.ppt

上传人:max****ui 文档编号:6333983 上传时间:2020-02-23 格式:PPT 页数:24 大小:1.10MB
返回 下载 相关 举报
C语言程序设计经典教程cla.ppt_第1页
第1页 / 共24页
C语言程序设计经典教程cla.ppt_第2页
第2页 / 共24页
C语言程序设计经典教程cla.ppt_第3页
第3页 / 共24页
点击查看更多>>
资源描述
1 第八章指针 主要内容8 1指针和指针变量8 2指针与数组8 3字符串的指针重点熟练掌握指针的定义和引用 掌握用指针来处理数组 掌握用指针来处理字符 2 预备知识 直接和间接的含义内存即内部存储器 是由内存单元组成特点存储单元的最小单位为字节存储单元是线性连续的 3 内存计算机的内存中的每一个字节都有一个编号每一内存单元具有唯一的内存地址系统为每一个已定义的变量分配一定存储空间 使变量名与内存的一个地址相对应通过地址就能够访问该地址所标识的存储单元程序处理过程根据地址取出变量所对应的内存单元中存放的值参与计算 操作处理结果存入相应的变量名所对应的内存单元 4 高级语言中的变量具有三个属性变量的名变量的值变量的地址编程者使用c程序的一个变量定义变量的数据类型数据类型决定了一个变量在内存中所占用的存储空间的大小变量在内存中总是占用几个连续的字节定义变量名 语言的编译系统会根据变量的数据类型为该变量分配内存单元确定变量的地址变量的地址就是为变量分配的内存单元的起始编号通过变量名对内存中变量对应的地址进行操作 C语言如何处理 5 指针的概念inta b c a 10 b 20 c a b a b c 10 20 30 正常解释 实际情况 a b c 1000 2 1002 2 1004 2 10 20 10 20 30 在使用变量时总要去查表 降低了运行效率 也颇感不便 解决方案 p 1000 这是变量a的地址 这是变量 存放的是变量a的地址 指针变量 8 1指针和指针变量 6 指针变量的定义一般形式为 类型符 指针变量名 如 int p int q r floata b char s1 s2 p q r b s1均为指针变量 a s2为普通变量 约定 指针变量的图形表示 如 int p 普通变量的图形表示 如 inta p a 7 指针变量的引用两种基本的指针运算 输出 10 10 a 直接访问 间接访问 8 例8 1 通过指针变量存取变量的值 main inta b int p1 p2 printf a d b d n a b printf p1 d p2 d n p1 p2 a 10 b 20 p1 p1 程序1 程序2 程序3 程序4 p1 p1 10 p2 20 p1 使用指针之前 一定要使指针有明确指向 指针变量未存储确定地址时 不能使用 否则会造成系统的崩溃 9 例8 2 输入a和b两个数 按先大后小的顺序输出 a和b的值不变 main inta b p1 p2 p scanf d d a b a 输出 a 10 b 20 Max 20 Min 10 10 6 2指针与数组 指针与数组的关系一个变量有地址 一个数组元素包含若干个数组元素 每个数组元素都在内存中占用存储单元 它们都有相应的地址 这个地址就可以用指针来实现存储 如有 inta 5 int p q p a 0 a 2 5 8 11 C语言规定 数组名代表数组的首地址 也就是第一个元素a 0 的地址 因此 a 则 p 1 a 1 p 1 a 1 p i a i p i a i 实际上 C语言编译系统在处理下标变量时 要把它转换成地址法的形式 p 1指向数组的下一个元素 a i a i p i p i 12 引用一个数组元素 可以用下标法或指针法 通过数组的起始地址计算数组元素的地址 即 a i 或 p i 形式 用指针变量处理数组元素 即p 形式 main inta 5 3 8 9 2 6 i p p a for i 0 i 5 i printf d p p 0 输出结果 3 1 8 2 9 3 2 4 6 5 printf d p 13 指针和数组的可替代性C语言中的指针和数组几乎可以互换指针可以用来完成涉及数组下标的操作例如 inta 10 int p 若p a 0 或p a 则p就指向了数组a的首址当p指向了一维数组a 指针对数组元素可以表示 p n与a n n 偏移量 的取值为0 9 表示数组元素a n 的地址 即 a n p n 和 a n 表示数组元素a n n的取值为0 9 指向数组的指针变量也可以用数组的下标形式p n 其效果相当于 p n 等价于a n 14 指针的运算 提示数组名代表数组的首地址固定的 不允许修改的不能对数组名采用 操作指针的算术运算除了应用于数组外没有什么意义除数组外 不能认为两个数据类型相同的变量在内存中是连续存储的指针的运算与其基类型有关通常情况下允许一个指针或多个指针指向同一个目标常见错误对不指向数组的指针进行算术运算将不是指向同一个数组的两个指针相减或比较 这是没有意义的指针的运算结果超出的数组的范围 15 8 3指针与字符串 字符串的表示形式如 charstr 80 China char p str printf s str printf s p printf s China 用 s输入 输出字符串时 只需要知道字符串的开始地址即可 使p指向字符串的开始地址 可写成 char p China 16 提示赋值时 字符串的结束标志 0 是系统自动增加的在输出或处理字符串指针变量和由字符数组组成的字符串时只要指出指针变量或字符数组的名字对于其它类型的数组 不能只使用数组名输出或处理全部元素使用指针编写的字符串处理程序比使用数组方式处理字符串的程序更简洁 更方便在C语言中 大量使用指针对字符串进行各种处理在处理字符串的函数中 一般都使用字符指针作为形参在函数之间通过指针传递整个数组 在被调用函数的内部就可以用指针方式访问数组中的元素 17 例8 3 测定字符串的长度main charstr abc p intlen p str for len 0 p 0 len p printf s的长度为 d n str len 运行结果 abc的长度为3思考 0 1 2 3 不是 0 不是 0 不是 0 是 0 for len 0 p len p printf s的长度为 d n p len for len 0 p len 1 2 3 不行 因为p已经指向字符串最后 可以 因为 p与 p 0 等价 可以 因为 p 是先取 p指向的内容完成比较 再使p 18 字符指针数组 例8 4 将若干字符串输出main char str Word Excel Outlook inti for i 0 i 3 i printf s n str i Word Excel Outlook 19 字符指针与字符数组的讨论占用的内存空间不同charstr 80 char p 初始化的概念不同charstr 80 abc char p abc 数组名是常量 字符指针是变量str str 2 Error p str 2 Ok p str 20 字符数组有一块确定的 连续的内存单元 而指针只有一个字的内存单元 所以 charstr 80 p scanf s str Ok scanf s p Error 21 第6章小测试 1 以下对一维数组a的正确说明是 A chara 10 B inta C intk 5 a k D chara a b c 2 若有说明语句 inty 4 0 0 则下面叙述不正确的是 A 数组y的每个元素都可得初值0B 二维数组y的行数为1C 该说明等价于inty 4 0 D 只有元素y 0 0 和y 0 1 可得到初值0 其余元素均得不到初值0 22 3 以下正确的数组定义语句是 A chara 5 1 2 3 4 5 0 B intb 2 1 2 C floatc 3 1 2 3 4 5 D chard 5 CHINA 4 判断字符串str1是否大于字符串str2 应当使用 A if str1 str2 B if strcmp str1 str2 C if strcmp str2 str1 0 D if strcmp str1 str2 0 5 若有语句 chars1 10 s2 10 books 则能将字符串books赋给数组s1的正确语句是 A s1 books B strcpy s1 s2 C s1 s2 D strcpy s2 s1 23 6 下面程序中有错误的行是 1 main 2 3 intx 3 1 4 intk 5 scanf d 9 A 3B 6C 7D 5 24 7 下面程序的功能是输出两个字符串中较短串的长度 请填空 includemain charstr1 20 str2 20 inti k num gets str1 gets str2 i strlen str1 k strlen str2 num printf d n num
展开阅读全文
相关资源
相关搜索

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


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

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


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