C语言程序设计教程 第4版 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 李丽娟 C语言程序设计教程(第4版)_第8章_指针

上传人:E**** 文档编号:89453194 上传时间:2019-05-25 格式:PPTX 页数:52 大小:790.25KB
返回 下载 相关 举报
C语言程序设计教程 第4版  普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  李丽娟 C语言程序设计教程(第4版)_第8章_指针_第1页
第1页 / 共52页
C语言程序设计教程 第4版  普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  李丽娟 C语言程序设计教程(第4版)_第8章_指针_第2页
第2页 / 共52页
C语言程序设计教程 第4版  普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  李丽娟 C语言程序设计教程(第4版)_第8章_指针_第3页
第3页 / 共52页
C语言程序设计教程 第4版  普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  李丽娟 C语言程序设计教程(第4版)_第8章_指针_第4页
第4页 / 共52页
C语言程序设计教程 第4版  普通高等教育“十一五”国家级规划教材  教学课件 ppt 作者  李丽娟 C语言程序设计教程(第4版)_第8章_指针_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《C语言程序设计教程 第4版 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 李丽娟 C语言程序设计教程(第4版)_第8章_指针》由会员分享,可在线阅读,更多相关《C语言程序设计教程 第4版 普通高等教育“十一五”国家级规划教材 教学课件 ppt 作者 李丽娟 C语言程序设计教程(第4版)_第8章_指针(52页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计教程 (第4版),第8章 指针,李丽娟 2013年2月,第8章 指针,本章主要内容 1. 指针的概念 2. 指针与变量的关系 3. 指针的使用方法和运算 4. 指针的作用 5. 指针与函数的关系 6. 指针与数组的关系,8.1 指针的概念,重要概念: 指针也是变量。 指针变量只能存放变量的地址。 指针变量也分别有不同的类型,用来保存不同类型变量的地址。 变量存储的概念: 假设有:int i =5; char ch = A; float x =7.34; 各变量占用内存单元的概念 情况如图所示:,8.1 指针的概念,8.1.1 指针变量的定义 指针变量的定义形式: 存储类型 数据类

2、型 *指针变量名=初始值; 如:int a,*p= t 为指向单精度浮点型变量的指针。,8.1 指针的概念,基本概念: 指针变量的值是某个变量的地址。 地址是内存单元的编号,每一个在生命周期内的变量在内存中都有一个地址,该地址不会因为其变量值的变化而变化。 内存单元编号通常用无符号的长整型表示,亦即指针变量的值是无符号的长整型。 特别提示:要区分指针变量所指的值和变量的值。,8.1 指针的概念,8.1.2 指针变量的使用 必须先将指针与变量的地址相关联,然后才能使用指针。 关联方式: 初始化; 赋值 赋值格式: 则表示p不指向任何存储单元。,8.1 指针的概念,指针的引用: 指针引用格式: *

3、指针变量名 代表所指变量的值; 指针变量名 代表所指变量的地址。 例如: int i, *p; float x, *t; p= /*相当于x=12.34 */,8.1 指针的概念,对于:int i, *p; float x, *t; p= 变量及指针的存储关系示意图如图所示:,8.1 指针的概念,对于:int i, *p; float x, *t; p= 变量i的地址:p、&i、&(*p) 变量i的值:*p、i、*(&i),小结,8.1 指针的概念,8.1.3 指针变量与简单变量的关系 变量的地址值是有系统分配的,不允许改变。 改变变量值的途径有3个。 例1:阅读程序example8_1.c,

4、了解简单变量与指针的关系。 例2:阅读程序example8_2.c,分析程序错误的原因。 #include main() int *p,*s,a; a=*p+*s; printf(“a=%dn*p=%lun*s=%lu“,a,p,s); 将程序放到不同的环境下运行,观察结果,思考。,8.2 指针的运算,对指针的运算,实际是对地址进行操作。 8.2.1 指针的算术运算 指针的运算通常只限于: 算述运算符:+、+ +、 。 关系运算符:、=、!=、=、 +、+ +代表指针向前移(地址编号增大)。 、 代表指针向后移(地址编号减小)。 设p、q为某种类型的指针变量,n为整型变量。 则:p+n、p+、

5、+p、p 、 p、pq的运算结果仍为指针。,8.2 指针的运算,若有:int a=3, *p= 假设a的地址为3000,则p=3000。 变量a与指针p的存储关系如图(a)所示。 执行语句:pp+1;后,指针p向前移动一个位置。 如果a是用2个字节,则p的值为3002,如图(b)所示; 如果a占用4个字节,则p的值为3004,如图(c)所示。,注意:指针p指向下一个单元,但*p的值未知。,例3: 阅读程序example8_3 ,了解指针的值的变化。 #include main() int i=108,*pi= /* 未知单元的值 */ ,8.2 指针的运算,8.2 指针的运算,8.2.2 指针

6、的关系运算 指针的关系运算常用于比较两指针是否指向统一变量。 假设有:int a, *p1, *p2; p1= ,8.3 指针与数组的关系,重要概念: C语言规定:数组名就是数组的首地址。 数组元素在内存中是连续存放的。 引申: 指针可以指向数组元素的地址,也可以指向数组名。 8.3.1 指向一维数组的指针 若有:int a5, *p; p=a;,8.3 指针与数组的关系,指针p与数组a的存储关系如图示。 a、&a0都是数组的首地址。,8.3 指针与数组的关系,若有:int a5, *p; p=a; 则: 表示数组a的地址:p、a、&a0。 引用数组元素ai:*(a+i)、*(p+i)、ai、

7、pi。 思考: a1的地址描述; ai的地址描述; 数组元素a1 的引用; 数组元素ai 的引用。 (参见表8-2 ),小结,8.3 指针与数组的关系,例5:阅读程序example8_5.c ,了解指针与数组的关系,学会正确使用指针。 #include main() int a2=1,2,i,*pa; char ch2=a,b,*pc; pa=a; pc= ,8.3 指针与数组的关系,注意:指向数组的指针和指向简单变量的指针的区别, 例6:阅读程序example8_6.c,了解指向数组的指针和指向变量的指针的关系。 #include main() int a1=123,a2=234,a3=34

8、5,i; int *p1,*p2,*p3; int as3=1,2,3,*ps; p1= ,8.3 指针与数组的关系,8.3.2 指向多维数组的指针 对多维数组而言,数组名同样代表着数组的首地址。 若有:int a34; 则:数组首地址的表示:a、a0、 这个语句在概念上容易混淆,有些编译时会有警告提示:“Suspicious Pointer Conversion”,应该避免这种情况。,8.3 指针与数组的关系,对于int a34, *p=a0; 指针p的使用方法同一维数组的指针。 p+的结果为指向下一个元素的地址。 指针p与数组的地址关系: p=a+1 移到下一行的地址 p=a0+1 p=&

9、a00+1 p=p+1 p+ 指针p与二维数组a的关系: 表8-4,8.3 指针与数组的关系,例7:阅读程序example8_7.c,了解指针与二维数组地址的关系。 #include main() int a34=1,2,3,4,5,6,7,8,9,10,11,12; int *p; p=a0; printf(“1:-n“); printf(“a=%lun“,a); printf(“*a=%lun“,a); printf(“p=%lun“,p); printf(“a0=%lun“,a0); printf(“,8.3 指针与数组的关系,printf(“2:-n“); printf(“a+1=%l

10、un“,a+1); printf(“*a+1=%lun“,*a+1); printf(“p+1=%lun“,p+1); printf(“a0+1=%lun“,a0+1); printf(“ ,8.3 指针与数组的关系,分析程序中指针变量、数组名之间的地址关系,掌握指针与二维数组的联系。 例8:阅读程序example8_8.c ,了解指针与数组元素的关系。 分析程序中用指针引用数组元素的表达式。 结论: 引用同一个数组元素,有多种不同的方法。 使用时选择一种自己认为最合适的。,8.3 指针与数组的关系,C语言还提供了一个指向多个元素的指针,它具有与数组名相同的特征,可以更方便地用指针来处理数组,

11、指向多个元素指针的定义形式为: 数据类型(*指针变量名)N; 其中,N是一整型常量。 例如: int (*p)4; /* 指向具有4个整型元素的数组 */ float (*pt)3; /*指向具有3个浮点型元素的数组 */ 若有: pp+1;,则p的值增加16。 pt=pt+1;,则p的值增加12。,8.3 指针与数组的关系,例9:阅读程序example8_9.c,了解指向简单变量的指针p和指向多个元素的指针t的特性。掌握它们的使用方法。 注意程序中指针p与指针t的不同特性。 例10:阅读程序example8_10.c,了解用指针引用数组元素的方法。,8.3 指针与数组的关系,8.3.3 字符

12、指针 指向字符型变量的指针具有另外的特性。 如:char *sp; sp可以指向字符、字符数组,也可以指向一个字符串。 如有: char *sp= “How are you? “; char *cp; cp=sp; 则: 指针sp和cp之间的关系如图示。,8.3 指针与数组的关系,若有: char *sp= “How are you? “; 引用字符串中某个字符,可以通过以下两种方式。 * (sp+i) spi 注意: 上面的第种情况:sp并不是数组。 如果用字符指针指向了某个字符串时,可以像引用数组元素那样,用spi来引用字符串中的字符;但不可以改变字符串中spi所代表的这个字符。 如果改变

13、指针变量的值,实际上是改变了指针的指向。,8.3 指针与数组的关系,例11:阅读程序example8_11.c,了解字符指针输出数组中的字符方法。 请分析程序中指针p引用字符数组元素的方法。 利用字符指针,可以很方便地完成许多字符串问题的处理。 请改写程序,采用直接输出数组元素的方法,输出字符数组中的内容,并与上面的程序进行比较。,8.3 指针与数组的关系,8.3.4 指针数组 指针数组:数组中的每一个元素都是指针。 指针数组的定义形式: 存储类型 数据类型 *数组名元素个数 例如:int *p5; 则:p为指针数组,共有5个元素:p0、p1、p2、p3、p4 每一个元素都是指向整型变量的指针

14、。 通常可用指针数组来处理字符串和二维数组。 例12:阅读程序example8_12.c,了解用指针数组访问二维数组中的每一个元素的方法。,8.3 指针与数组的关系,例13: 编写程序,对一组英文单词字符串进行按字典排列方式(从小到大)进行排序。 分析:可以用字符指针数组来保存每一个字符串,这样数组中的每一个元素就可以指向一个字符串,通过对数组元素中的字符进行比较,就可以完成字典排序。 设计一个排序函数:void sort(char *words , int n),可以对words中的n个字符串进行排序。 程序:example8_13.c 分析程序中排序函数void sort(char *wo

15、rds , int n)的实现算法。 思考:其他的算法。,8.4 指针作为函数的参数,指针作为变量,也可以用来作为函数的参数。 若函数的参数类型为指针型,则实参与形参的传递是一种“传址”方式。 如果函数中有对形参值的改变,实际上也就是修改了实参的值。 例14:从键盘输入任意两个整数作为两个变量的值,编写程序,将这两个变量的值进行交换。 分析:可设计函数void swap(int *p1,int *p2),通过指针与变量的关系,交换指针p1和p2所指变量的值。 程序:example8_14.c,8.4 指针作为函数的参数,例15:用字符指针指向从键盘输入的字符串,编写程序,计算输入的字符串的长度。输入结束时的换行符不作为字符计入其长度。 分析: 用字符指针来表示字符串时,指针指向的是字符串的首地址。 输入结束时,系统会将结束标志0置于字符串的尾部。 计算字符串的长度时,结束标志是不计数的。 若输入的字符串为“abcdefg”,则占用的内存单元为8个,但字符串的长度为7。 设

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

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

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