C语言程序设计 第7章指针

上传人:小**** 文档编号:133010167 上传时间:2020-05-23 格式:PPTX 页数:55 大小:859.25KB
返回 下载 相关 举报
C语言程序设计 第7章指针_第1页
第1页 / 共55页
C语言程序设计 第7章指针_第2页
第2页 / 共55页
C语言程序设计 第7章指针_第3页
第3页 / 共55页
亲,该文档总共55页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C语言程序设计 第7章指针》由会员分享,可在线阅读,更多相关《C语言程序设计 第7章指针(55页珍藏版)》请在金锄头文库上搜索。

1、第7章指针 C语言程序设计 指针是C语言中一种重要的数据类型 是C语言的精华 灵活地运用指针可以处理各种复杂的数据结构 从而编出精练而高效的应用程序 7 1指针的概念 1 指针的定义在计算机中 所有的数据都是存放在存储器中 一般把存储器中的一个字节称为一个内存单元 不同的数据类型所占用的内存单元数不等 如整型量占4个单元 字符量占1个单元等 为了正确地访问这些内存单元 必须为每个内存单元编上号 根据一个内存单元的编号即可准确地找到该内存单元 内存单元的编号也叫做地址 通常把这个地址也称为指针 内存单元的指针和内存单元的内容是两个不同的概念 对于一个内存单元来说 单元的地址即为指针 其中存放的数

2、据才是该单元的内容 指针是一种数据类型 它是用来专门存放所指对象地址的变量 即数据值是存放在指针所指的对象中 而不是在指针变量中 2 指针变量的定义指针变量定义的一般形式如下 类型说明符 变量名 其中 表示指针变量 变量名即为定义的指针变量名 类型说明符表示指针变量所指对象的数据类型 如 int p1 表示p1是指向某一整型变量的指针变量 它的值是某个整型变量的地址 如图7 1 1所示 7 1指针的概念 例如 float p2 p2是指向实型变量的指针变量 char p3 p3是指向字符变量的指针变量 注意 一个指针变量只能指向同类型的变量 如p2只能指向实型变量 不能时而指向一个实型变量 时

3、而又指向一个字符变量 7 1指针的概念 3 指针变量的引用指针变量同普通变量一样 使用之前不仅要定义说明 而且必须赋予具体的值 未经赋值的指针变量不能使用 否则将造成系统混乱 甚至死机 C语言中提供了运算符 和取地址运算符 7 1指针的概念 设有指向整型变量的指针变量p 如要把整型变量a的地址赋予p 可采用以下两种方式 指针变量初始化的方法inta int p 7 1指针的概念 注意 被赋值的指针变量前不能再加 如写为 p 7 1指针的概念 例7 1 1 运用指针输出变量的值 7 1指针的概念 程序运行结果 3242 分析 定义整型变量a 定义一个指向a的指针p 从键盘输入一个数送到p指向的地

4、址 将a的值加10 输出指针p所指向的地址中的内容 7 1指针的概念 4 指针变量作为函数参数函数的参数不仅可以是整型 实型 字符型等数据 还可以是指针类型 它的作用是将一个变量的地址传送到另一个函数中 例7 1 2 输入a b c三个数 按从小到大的顺序输出 7 1指针的概念 7 1指针的概念 程序运行结果如下 9575 7 9 分析 运用冒泡排序法 两两依次相比较 将小数放在前面 大数放在后面 比较三次得到结果 本程序中定义了指针变量 变量互换时不再借助于第三个变量 而是利用指针指向不同的变量来实现变量的互换 流程图如图7 1 2所示 7 1指针的概念 7 1指针的概念 一个数组是由连续的

5、一块内存单元组成的 数组名就是这块连续内存单元的首地址 一个数组也是由各个数组元素 下标变量 组成的 每个数组元素按其类型不同占有几个连续的内存单元 一个数组元素的首地址是指它所占有的几个内存单元的首地址 一个指针变量既可以指向一个数组 也可以指向一个数组元素 可把数组名或第一个元素的地址赋予它 1 指针变量处理一维数组引入指针变量后 可以采用 a i 形式和指针法 即采用 pa i 形式访问数组元素 两种方法的区别如图7 2 1所示 7 2指针与数组 如要使指针变量指向第i号元素 可以把i元素的首地址赋予它或把数组名加i赋予它 inta 10 int p p 把数组元素a 5 的地址赋给指针

6、变量p 7 2指针与数组 例7 2 1 运用指针法访问数组元素 7 2指针与数组 程序运行结果 a 0 0a 1 1a 2 2a 3 3a 4 4 分析 先用一个循环语句将数组a的5个元素分别赋值为0 4 再用一个循环语句将数组a的5个元素分别输出 两个循环中访问数组均使用指针法 7 2指针与数组 7 2指针与数组 程序运行结果 a 0 0a 1 1a 2 2a 3 3a 4 4 分析 用一个循环实现数组元素的赋值和输出 其中 pa 是指先将指针pa所指向的存储单元的内容读出 再将指针pa后移 指向下一个数组元素 7 2指针与数组 2 用数组名作函数参数可用数组名和数组指针变量作函数参数 数组

7、名就是数组的首地址 实参向形参传送数组名实际上就是传送数组的地址 形参得到该地址后也指向同一数组 指针变量的值也是地址 数组指针变量的值即为数组的首地址 也可作为函数的参数使用 7 2指针与数组 例7 2 2 输入10个数 求出其平均值 7 2指针与数组 7 2指针与数组 程序运行结果 请输入十个数 11223344556677889928这十个数的平均值为 52 30 分析 定义一个用于求平均值的函数aver 主函数中定义保存这10个数的数组sco 并将sco的首地址通过指针sp传给aver定义的指针pa 在函数aver 中通过pa的移动求出数组sco所有元素之和 然后求出均值 最后传给主函

8、数并输出 7 2指针与数组 3 指针变量处理二维数组定义以下二维数组 inta 3 4 0 1 2 3 4 5 6 7 8 9 10 11 a为二维数组名 此数组有3行4列 共12个元素 可理解为 数组a由三个元素组成a 0 a 1 a 2 而它们每个元素又是一个一维数组 且都含有4个元素 相当于4列 如a 0 所代表的一维数组所包含的4个元素为a 0 0 a 0 1 a 0 2 a 0 3 如图7 2 2所示 7 2指针与数组 从二维数组的角度来看 a代表二维数组的首地址 当然也可看成是二维数组第0行的首地址 a 1代表第1行的首地址 a 2代表第2行的首地址 如果此二维数组的首地址为100

9、0 由于第0行有4个整型元素 所以a 1的地址为1016 a 2的地址为1032 VC 6 0整型数据占4个字节 如图7 2 3所示 7 2指针与数组 例7 2 3 输出二维数组元素的地址和数值 7 2指针与数组 程序运行结果 4354852 4354852 4354852 4354852 0 4354868 4354868 4354868 4354868 4 4354884 4354884 4354884 4354884 8 4354872 43548725 5 分析 二维数组a的首地址是一维数组a 0 的首地址 即数组元素a 0 0 的地址 二维数组a的首地址加1 是一维数组a 1 的首地

10、址 即数组元素a 1 0 的首地址 二维数组a的首地址加2 是一维数组a 2 的首地址 即数组元素a 2 0 的首地址 同理 将一维数组a 1 的首地址加1 即数组元素a 1 1 的地址 其值为5 7 2指针与数组 1 字符串的表示形式 1 字符串常量存放在一个字符数组中 例如 chars program 数组s共有8个元素所组成 其中s 8 中的内容是 0 实际上 在字符数组定义的过程中 编译程序直接把字符串复制到数组中 即对数组s初始化 2 用字符指针指向字符串 然后通过字符指针来访问字符串存储区域 例如 char cp cp program 7 3指针与字符串 使cp指向字符串常量中的第

11、0号字符p 通过cp来访问这一存储区域 如 cp或cp 0 就是字符p 而 cp i 或cp i 就相当于字符串的第i号字符 例7 3 1 运用字符指针输出字符串 7 3指针与字符串 程序运行结果 IloveChina 注意 程序中 首先定义字符指针变量string 然后将字符串的首地址赋予string 程序中的 char string string IloveChina 相当于char string IloveChina 7 3指针与字符串 2 字符串指针作函数参数 例7 3 2 将一个字符串的内容复制到另一个字符串中 不能使用strcpy 函数 7 3指针与字符串 程序运行结果 strin

12、ga CHINAstringb CHINA 分析 将pss指向的源字符复制到pds所指向的目标字符中 判断所复制的字符是否为 0 若是 则表明源字符串结束 不再复制 否则 pds和pss都加1 指向下一字符 继续判断 在主函数中 以指针变量pa pb为实参 分别取得确定值后调用cpystr 函数 7 3指针与字符串 3 字符数组和字符指针变量的区别 1 字符数组由若干元素组成 每个元素中放一个字符 而字符指针变量中存放的是地址 即字符串的第一个字符的地址 2 在赋值方式上 字符数组只能对各个元素赋值 字符指针变量可以如下赋值 char a a IloveChina 3 字符数组在定义时可以整体

13、赋初值 但不能在赋值语句中整体赋初值 而字符指针变量可以 7 3指针与字符串 4 定义字符数组 不赋初值可以使用 而定义字符指针时 必须赋初值才能使用 5 指针变量的值是可以改变的 例7 3 3 更改指针变量的值 输出字符串 7 3指针与字符串 程序运行结果 China 6 字符指针可以带下标使用 指针使用下标时可以理解为数组 如 char p abcdef p表示字符串 abcdef 的首地址 p的值则相当于p 0 值为 a p 1 值为 b 7 字符数组中各元素的值是可以改变的 可以再赋值 但字符指针变量指向的字符串常量中的内容是不可以改变的 不可以再赋值 7 3指针与字符串 1 用函数指

14、针变量调用函数在C语言中 一个函数总是占用一段连续的内存区 而函数名就是该函数所占内存区的首地址 可以将函数的首地址赋予一个指针变量 使该指针变量指向该函数 然后通过指针变量调用该函数 把这种指向函数的指针变量称为函数指针变量 函数指针变量定义的一般形式如下 类型说明符 指针变量名 其中 类型说明符 表示被指函数的返回值的类型 指针变量名 表示 后面的变量是定义的指针变量 最后的空括号表示指针变量所指的是一个函数 如 int pf 表示pf是一个指向函数入口的指针变量 该函数的返回值是整型 7 4指针与函数 例7 4 1 运用指针形式调用函数 输入两个数 输出较大数 是整型 7 4指针与函数

15、程序运行结果 Inputtwonumbers 35max 5 分析 定义一个求较大值的函数max 主函数通过调用函数max 求出两数中的较大值 然后输出 在主函数中定义一个函数指针 pmax 然后将该指针指向函数max 的起始地址 用函数指针变量形式调用函数z pmax x y 从上例可以看出 调用函数的一般形式如下 指针变量名 实参表 7 4指针与函数 使用函数指针变量时注意 1 函数指针变量不能进行算术运算 这是与数组指针变量不同的 数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素 而函数指针的移动是毫无意义的 2 函数调用中 指针变量名 的两边的括号不可少 其中的 不应该理解

16、为求值运算 在此处只是一种表示符号 2 返回指针值的函数函数类型是指函数返回值的类型 在C语言中允许一个函数的返回值是一个指针 这种返回指针值的函数称为指针型函数 7 4指针与函数 定义指针型函数的一般形式如下 类型说明符 函数名 形参表 7 4指针与函数 其中函数名之前加 表明这是一个指针型函数 即返回值是一个指针 类型说明符表示返回的指针值所指向的数据类型 例如 表示ap是一个返回指针值的指针型函数 它返回的指针指向一个整型变量 例7 4 2 通过字符指针型函数 输入一个1 7之间的整数 输出对应的星期名称 7 4指针与函数 程序运行结果 InputDayNo 3DayNo 3 WednesdayInputDayNo 0DayNo 0 error 分析 定义一个指针型函数day name 它的返回值指向一个字符串 该函数中定义了一个静态指针数组name name数组初始化赋值为8个字符串 分别表示各个星期名及出错提示 形参n表示与星期名所对应的整数 在主函数中 把输入的整数i作为实参 在printf语句中调用day name 函数并把i值传送给 7 4指针与函数 形参n day n

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

当前位置:首页 > IT计算机/网络 > 其它相关文档

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