C语言指针精品课件.ppt

上传人:资****亨 文档编号:127160961 上传时间:2020-03-30 格式:PPT 页数:107 大小:1.49MB
返回 下载 相关 举报
C语言指针精品课件.ppt_第1页
第1页 / 共107页
C语言指针精品课件.ppt_第2页
第2页 / 共107页
C语言指针精品课件.ppt_第3页
第3页 / 共107页
C语言指针精品课件.ppt_第4页
第4页 / 共107页
C语言指针精品课件.ppt_第5页
第5页 / 共107页
点击查看更多>>
资源描述

《C语言指针精品课件.ppt》由会员分享,可在线阅读,更多相关《C语言指针精品课件.ppt(107页珍藏版)》请在金锄头文库上搜索。

1、第11章指针 C程序设计快速进阶大学教程 C程序设计快速进阶大学教程 2020 3 30 2 第11章指针 本章要点指针概念指针与数组指针与函数字符串动态空间管理 C程序设计快速进阶大学教程 2020 3 30 3 11指针 知识点指针概念指向数组的指针 指针数组指针做参数 指针做为函数值 指向函数的指针字符串动态空间管理 C程序设计快速进阶大学教程 2020 3 30 4 11 1理解指针 当问路时 经常听到这样的回答 向前走过3个路口右转 再过两个路口左转 再前行200米 当在图书馆中找一本时 经常是这样找 第五排书架 从上向下数第二层 左数第6本 老师提问学生 在不知道学生姓名的情况下

2、经常说 第4排左数第二个同学 上述例子说明对一个事务的访问 当不能够通过名称直接访问 只能够通过其位置进行访问 C程序同样的道理 前面的章节对数据的访问是通过变量名称实现的 但是 有时候不知道其名称 甚至其没有名称 这时候只能通过该数据所在的地址进行访问 C程序设计快速进阶大学教程 2020 3 30 5 11 2指向变量的指针 C语言中定义一个变量时 例如 inti1 3 描述了变量相关的3方面的属性 值 地址 类型 1 值为3 通过变量访问 如i1 5 2 地址为0012ff78 32位机器 0012ff78为16进制数 占用内存空间的位置 通过 i1访问 在scanf语句中使用过 3 类

3、型为int 决定了其能够参加的运算 同时也决定了其占用空间的大小 从起始地址开始占用的连续字节数 占用空间的大小通过sizeof运算符 在vc中sizeof i1 为4个字节 C程序设计快速进阶大学教程 2020 3 30 6 11 2指向变量的指针 把变量i1的地址存放于指针变量pi1中 C程序设计快速进阶大学教程 2020 3 30 7 11 2 1指针变量的定义 指针变量定义的一般形式为 类型说明符 变量名 例如 int pi1 对指针变量的定义包括三个内容 1 指针类型说明 表示这是一个指针变量 2 指针变量名 pi1为指针变量名 3 指针所指向的变量的数据类型 int为指针变量所指向

4、的变量的数据类型 说明pi1只能储存整型变量的地址 再如 float pf1 pf1是指向浮点变量的指针变量 char pc1 pc1是指向字符变量的指针变量 C程序设计快速进阶大学教程 2020 3 30 8 11 2 2指针变量的引用 指针变量同普通变量一样 使用之前不仅要定义说明 而且必须赋予具体的值 未经赋值的指针变量不能使用 否则将造成系统混乱 甚至死机 问路时别人告诉你一个不存在的地址 会怎么样 C程序设计快速进阶大学教程 2020 3 30 9 11 2 2指针变量的引用 和指针相关有两个运算符 C程序设计快速进阶大学教程 2020 3 30 10 11 2 2指针变量的引用 指

5、针变量说明 1 对 要区别类型说明符与间接访访问符 2 不能用一个数给指针变量赋值 下面赋值是错误的 int pi1 pi1 20 但是 指针可用0赋值 代表空指针 哪里也不指向 3 给指针变量赋值时 指针变量前不能加 说明符 下面的写法是错误的 inti1 int pi1 pi1 指针变量pi1前面加 就代表间接访问了 代表i1 C程序设计快速进阶大学教程 2020 3 30 11 11 2 2指针变量的引用 指针变量说明 4 指针变量未指向具体有效地址 间接访问会有问题int pi1 指针变量pi1未赋值 不知道指向哪里 pi1 200 向pi1所指向的地址空间赋值200 随机给你一个账户

6、 存钱后怎样取呢 判定一个指针变量是否指向有效空间 int pi1 0 if pi1 0 pi1 200 省略号部分 若未使pi1指向有效空间 这对 pil的赋值就不会执行 C程序设计快速进阶大学教程 2020 3 30 12 11 2 2指针变量的引用 指针变量说明 5 指针变量的值是可以改变的inti1 3 i2 4 pi1 pi1 C程序设计快速进阶大学教程 2020 3 30 13 11 2 2指针变量的引用 指针变量说明 5 指针变量的值是可以改变的pi1 改变指针变量pi1指向i2 C程序设计快速进阶大学教程 2020 3 30 14 11 2 2指针变量的引用 指针变量说明 6

7、指针变量只能用同类型的地址赋值float pf1 pf1是指向浮点变量的指针变量 charc1 字符变量 pf1 pf1只能存储float数据的地址 用字符型数据地址赋值是错误的 C程序设计快速进阶大学教程 2020 3 30 15 11 2 2指针变量的引用 指针变量说明 7 同类型指针变量间可以相互赋值例11 1交换指针变量 includeintmain inti1 3 i2 4 int pi1 pi2 pi3 pi1 程序运行结果 i1 3i2 4 pi1 4 pi2 3 C程序设计快速进阶大学教程 2020 3 30 16 11 2 2指针变量的引用 指针变量说明 7 同类型指针变量间

8、可以相互赋值例11 1交换指针变量 C程序设计快速进阶大学教程 2020 3 30 17 11 2 2指针变量的引用 指针变量说明 7 同类型指针变量间可以相互赋值例11 2交换指针变量所指向的数据 includeintmain inti1 3 i2 4 int pi1 pi2 intiTemp 0 pi1 程序运行结果 i1 4i2 3 pi1 4 pi2 3 C程序设计快速进阶大学教程 2020 3 30 18 11 2 2指针变量的引用 指针变量说明 7 同类型指针变量间可以相互赋值例11 2交换指针变量所指向的数据 C程序设计快速进阶大学教程 2020 3 30 19 课堂练习 1 指

9、针变量存储的是什么 C程序设计快速进阶大学教程 2020 3 30 20 11 3数组与指针 一个变量有一个地址 一个数组包含若干元素 每个数组元素都在内存中占用存储单元 它们都有相应的地址 所谓数组的指针是指数组的起始地址 数组元素的指针是数组元素的地址 对数组元素也可以采用指针进行访问 效率相对更高 C程序设计快速进阶大学教程 2020 3 30 21 11 3 1一维数组与指针 一个数组是由连续的一块内存单元组成的 数组名就是这块连续内存单元的首地址 常量 intiArr 5 1 2 3 4 5 int pi pi C程序设计快速进阶大学教程 2020 3 30 22 11 3 1一维数

10、组与指针 C语言规定 数组名代表数组的首地址 也就是第0号元素的地址 因此 下面两个语句等价 pi 不可以 因为iArr为常量 C程序设计快速进阶大学教程 2020 3 30 23 11 3 1一维数组与指针 1 指针相关的运算符 1 取地址运算符 单目运算符 注意其优先级 其结合性为自右至左 其功能是取变量的地址 2 间接访问运算符 单目运算符 其结合性为自右至左 用来表示指针变量所指的变量 3 赋值运算符 可以给指针变量赋值 4 算术运算符 地址表达式 pi 整型表达式 in 结果为在pi地址值位置跳过in pi所指类型字节数 个字节后的地址 C程序设计快速进阶大学教程 2020 3 30

11、 24 11 3 1一维数组与指针 1 指针相关的运算符 地址表达式 pi 整型表达式 in 结果为在pi地址值位置跳回in pi所指类型字节数 个字节后的地址 地址表达式 pi1 地址表达式 pi12 结果为在pi2和pi1相差的字节数 pi1所指类型字节数 pi1与pi2必须指向相同数据类型 地址变量 pi 或者 地址变量 pi 结果为在pi地址值位置跳过pi所指类型字节数个字节后的地址 分前 和后 地址变量 pi 或者 地址变量 pi 结果为在pi地址值位置跳回pi所指类型字节数个字节后的地址 分前 和后 C程序设计快速进阶大学教程 2020 3 30 25 11 3 1一维数组与指针

12、1 指针相关的运算符 5 关系运算 支持6种关系运算符 用来比较地址的大小 例如 iArr 1 iArr 3 为真 pi iArr 3为真 pi的值为iArr C程序设计快速进阶大学教程 2020 3 30 26 11 3 1一维数组与指针 1 指针相关的运算符 5 关系运算 intiArr 5 0 1 2 3 4 int pi pi1 pi2 pi pi 由于 和 同优先级 结合方向自右而左 等价于 pi 先对 pi 然后pi加1 表达式的值为iArr 1 pi的值为 iArr 2 pi 等价于 pi 先pi加1 然后 pi 表达式的值为iArr 2 pi的值为 iArr 2 pi 先 pi

13、 然后 pi 加1 表达式的值为iArr 1 iArr 1 的值改变了 pi的值为 iArr 1 pi的值未改变 pi2 pi1 pi2和pi1相差两个整型数所占字节数的大小 它的返回值不是相差字节数 而是相差整数的个数 所以值为2 上述算术运算符对简单变量地址运算是无意义的 因为对于一个简单变量x x 5计算的结果地址不知道是哪个数据的地址 而数组空间是连续的 对于一个数组arr arr 5就是arr 5 的地址 C程序设计快速进阶大学教程 2020 3 30 27 11 3 1一维数组与指针 1 指针相关的运算符 5 关系运算 intiArr 5 0 1 2 3 4 int pi pi1

14、pi2 pi pi 由于 和 同优先级 结合方向自右而左 等价于 pi 先对 pi 然后pi加1 表达式的值为iArr 1 pi的值为 iArr 2 pi 等价于 pi 先pi加1 然后 pi 表达式的值为iArr 2 pi的值为 iArr 2 pi 先 pi 然后 pi 加1 表达式的值为iArr 1 iArr 1 的值改变了 pi的值为 iArr 1 pi的值未改变 pi2 pi1 pi2和pi1相差两个整型数所占字节数的大小 它的返回值不是相差字节数 而是相差整数的个数 所以值为2 上述算术运算符对简单变量地址运算是无意义的 因为对于一个简单变量x x 5计算的结果地址不知道是哪个数据的

15、地址 而数组空间是连续的 对于一个数组arr arr 5就是arr 5 的地址 C程序设计快速进阶大学教程 2020 3 30 28 11 3 1一维数组与指针 2 引用数组元素intiArr 5 1 2 3 4 5 int pi pi iArr 1 pi i1和iArr i1就是iArr i1 的地址 或者说它们指向iArr数组的第i个元素 2 pi i1 或 iArr i1 就是pi i1或iArr i1所指向的数组元素 即iArr i1 例如 pi 2 或 iArr 2 就是iArr 2 3 指向数组指针变量可以带下标 如pi i1 与 pi i1 等价 引入指针变量后 对于数组iArr

16、 pi是指向数组的指针变量 其初值pi iArr 就可以用两种方法来访问数组元素 1 下标法 即用iArr i1 形式访问数组元素 也可以用pi i1 访问数组元素 2 指针法 即采用 iArr i1 或 pi i1 形式 用间接访问的方法来访问数组元素 C程序设计快速进阶大学教程 2020 3 30 29 11 3 1一维数组与指针 例11 3数组元素赋值并输出 数组名 下标法 includeintmain intiArr 5 i1 for i1 0 i1 5 i1 iArr i1 i1 for i1 0 i1 5 i1 printf iArr d d n i1 iArr i1 return0 C程序设计快速进阶大学教程 2020 3 30 30 11 3 1一维数组与指针 例11 4数组元素赋值并输出 指针变量 下标法 includeintmain intiArr 5 i1 int pi iArr pi为变量 iArr为常量 for i1 0 i1 5 i1 pi i1 i1 for i1 0 i1 5 i1 printf iArr d d n i1 pi i1 return0 C

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号