C语言程序设计教程 教学课件 ppt 作者 李玲2 第8章

上传人:E**** 文档编号:89346700 上传时间:2019-05-23 格式:PPT 页数:55 大小:413.50KB
返回 下载 相关 举报
C语言程序设计教程 教学课件 ppt 作者  李玲2 第8章_第1页
第1页 / 共55页
C语言程序设计教程 教学课件 ppt 作者  李玲2 第8章_第2页
第2页 / 共55页
C语言程序设计教程 教学课件 ppt 作者  李玲2 第8章_第3页
第3页 / 共55页
C语言程序设计教程 教学课件 ppt 作者  李玲2 第8章_第4页
第4页 / 共55页
C语言程序设计教程 教学课件 ppt 作者  李玲2 第8章_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《C语言程序设计教程 教学课件 ppt 作者 李玲2 第8章》由会员分享,可在线阅读,更多相关《C语言程序设计教程 教学课件 ppt 作者 李玲2 第8章(55页珍藏版)》请在金锄头文库上搜索。

1、1,第8章 指 针,C 语言程序设计,北京科技大学 计算机系,2019/5/23,2,8.1 指针和指针变量 8.2 指针与数组 8.3 指针与函数,第8章 指针,2019/5/23,3,8.1 指针和指针变量,main() float x; int y; ,8.1.1 指针和指针变量的概念,变量的两个物理意义,变量的内容,变量的地址,2019/5/23,4,8.1 指针和指针变量,main() int a,b,c; a=5; b=3; c=a +b; ,8.1.1 指针和指针变量的概念,2000 2001 2002 2003 2004 2005,a b c,8,利用变量名存取数据的方式称为“

2、直接存取”方式。,2019/5/23,5,C 语言还提供了对内存单元的“间接存取”方式,5,3,2004,a和b相加的结果(*p=a+b)存放到变量p所指向的内存单元中去。此时c称为指针变量p的目标变量。,p=&c,8,main() int a=5,b=3,c,*p; p = ,8.1 指针和指针变量,8.1.1 指针和指针变量的概念,变量的地址称为变量的指针 存放地址的变量称为指针变量,2019/5/23,6,main() int a,*p= ,2004,8.1 指针和指针变量,8.1.2 指针变量的定义,2000,指针变量初始化,2019/5/23,7,main() int a,*p= ,

3、间接存取运算,2004,8.1 指针和指针变量,8.1.3 指针的基本运算,2000,*p = ,5,2019/5/23,8,方法1:目标变量值不变,改变指针变量的 指向求解。 main( ) int a,b,*p1,*p2,*p; p1= ,a=6,b=8 max=8,min=6,8.1 指针和指针变量,【例8.1】输入a、b两个整数, 使用指针变量按大小顺序输出 这两个整数。,2019/5/23,9,方法2:利用指针变量直接改变目标变量的值 求解。 main() int a,b,t,*p1,*p2; p1= ,a=8,b=6 max=8,min=6,8.1 指针和指针变量,6,2019/5

4、/23,10,指针的加减运算,8.1 指针和指针变量,8.1.3 指针的基本运算,main() int a=10,20,30,40,50,*p1,*p2; p1=p2=a; printf(p1=%u,*p1=%dn,p1,*p1); p2+=3; printf(p2=%u,*p2=%dn,p2,*p2); ,P2=410,*p2=40,指针加减运算要点: 只有当指针变量指向数组时指针的加减 运算才有意义。 指针变量可加减一个整型表达式。如: p1+、p2+3、p2-、p2-2。 指针的加减运算是以基类型为单位(即 sizeof(类型))的。 两个指针变量不能作加法运算,只有当 两个指针变量指向

5、同一数组时,进行指针变 量相减才有实际意义。如:p2-p1。,2019/5/23,11,指针的关系运算,8.1 指针和指针变量,8.1.3 指针的基本运算, 指向同一数组的两个指针可以进行关系 运算,表明它们所指向元素的相互位置关系 。 如:p2 p1、p2 = p1。 指针与一个整型数据进行比较是没有意 义的 。 不同类型指针变量之间比较是非法的。 NULL可以与任何类型指针进行=、!= 的关系运算,用于判断指针是否为空指针 。,2019/5/23,12, 数组名是该数组的指针 a是数组的首地址(即a0的地址),是一 个指针常量。 a = &a0,a+1 = &a1, ,a+9 = &a9

6、数组元素的下标表示法: a0,a1, ,ai, ,a9 数组元素的指针表示法: *(a+0),*(a+1), ,*(a+i), ,*(a+9),8.2 指针与数组,8.2.1 指向数组的指针,1. 一维数组的指针,例如: int a10,*p;,2019/5/23,13,当p指向a0时,用p表示数组元素 下标法: p0,p1, ,pi, ,p9 指针法: *(p+0),*(p+1), ,*(p+i), ,*(p+9),8.2 指针与数组,8.2.1 指向数组的指针,1. 一维数组的指针, 指向一维数组元素的指针变量 由于数组元素也是一个内存变量,所以此类指针变量的定义和使用与指向变量的指针变量

7、相同。例如:int a10,*p; p = a;(或 p = ),a,2019/5/23,14,【例8.3】用指针法输出数组元素。 main( ) int a10, i, *p; for (i=0; i10; i+) scanf(“%d“, a+i); for (i=0; i10; i+) printf(“%4d “,*(a+i); printf(“n“); for (p=a,i=0; i10; i+) printf(“%4d “,*(p+i); printf(“n“); ,8.2 指针与数组,8.2.1 指向数组的指针,1. 一维数组的指针,1 2 3 4 5 6 7 8 9 10,1 2

8、3 4 5 6 7 8 9 10,1 2 3 4 5 6 7 8 9 10,2019/5/23,15,【例8.3】用指针法输出数组元素。 main( ) int a10, i, *p; for (p=a; pa+10; p+) scanf(“%d“,p); for (p=a; pa+10; p+) printf(“%d “,*p); printf(“n“); ,8.2 指针与数组,8.2.1 指向数组的指针,1. 一维数组的指针,10,2019/5/23,16,数组名是地址,指向数组的指针变量存放的也是地址。 通过指针变量也可以引用数组元素。p = &a0 等效于 p = a。,数组名和指向数

9、组的指针变量的区别: 指针变量p是变量可以赋值, 数组名a是地址常量不能赋值。,8.2 指针与数组,8.2.1 指向数组的指针,用指针变量引用数组元素, 必须关注其当前值。例如: p = p + 3 *(p-1)、p-1等价于a2,2019/5/23,17,【例8.4】输入五个整数,使用指针变量将这五个数 按从小到大排序后输出。 main( ) int a5,*pp,*p,*q,t; for (p=a; p*q) pp=q; if (pp!=p) t=*p;*p=*pp;*pp=t; for (p=a; pa+5; p+) printf(“%d “,*p); printf(“n“); ,8.2

10、 指针与数组,2019/5/23,18, 二维数组的地址 例如:int a34; 二维数组名a是数组的首地址。 二维数组a包含三个行元素:a0、a1、a2 。,三个行元素的地址分别是:a、a+1、a+2。 而a0、a1、a2也是地址量,是一维数组名, 即*(a+0)、*(a+1)、*(a+2)是一维数组首个元素地址。,8.2 指针与数组,8.2.1 指向数组的指针,2. 二维数组的指针,2019/5/23,19, 二维数组元素的地址 a0、a1、a2是一维数组名,所以ai+j是数组元素的地址。,数组元素aij的地址可以表示为下列形式: &aij、ai+j 、*(a+i)+j,8.2 指针与数组

11、,8.2.1 指向数组的指针,2. 二维数组的指针,2019/5/23,20, 二维数组元素的表示法 数组元素可用下列形式表示: aij、*(ai+j)、*(*(a+i)+j),8.2 指针与数组,8.2.1 指向数组的指针,2. 二维数组的指针,a 是二维数组,根据C的地址计算方法,a经过两次 * 操作才能访问到数组元素。所以 * a 是 a0,* * a 才是 a00。 a0是a00的地址,*a0是a00。,2019/5/23,21, 指向二维数组元素的指针变量,8.2 指针与数组,8.2.1 指向数组的指针,2. 二维数组的指针,【例8.5】用指向数组元素的指针变量输出数组元素。 mai

12、n( ) int a34=0,1,2,3,10,11,12,13,20,21,22,23, i, j, *p; for (p=a0, i=0; i 3; i+) for (j=0; j 4; j+) printf(“%4d“,*(p+i*4+j); /* 元素的相对位置为i*4+j */ printf(“n“); ,这种指针变量的定义及使用与指向一维数组元素的 指针变量是相同的,用它存放二维数组元素的地址。,2019/5/23,22, 指向一维数组的指针变量 指向一维数组指针变量的定义形式: 数据类型标识符 (*变量名)元素个数,8.2 指针与数组,8.2.1 指向数组的指针,2. 二维数组的

13、指针,“*”表示其后的变量名为指针类型,元素个数表示 目标变量是一维数组,并说明一维数组元素的个数。由于 “*”比“ ”的运算级别低,“*变量名”作为一个说明部 分,两边必须加括号。 “数据类型标识符”是定义一维数 组元素的类型。,2019/5/23,23,【例8.6】用指向一维数组的指针变量输出数组元素。 main( ) int a34=0,1,2,3,10,11,12,13,20,21,22,23; int (*lp)4, i, j; for (lp=a, i=0; i3; i+) for (j=0; j4; j+) printf(“%4d“,*(*(lp+i)+j); printf(“n

14、“); ,8.2 指针与数组,8.2.1 指向数组的指针,2. 二维数组的指针,0 1 2 3,10 11 12 13,20 21 22 23,2019/5/23,24,【例8.6】用指向一维数组的指针变量输出数组元素。 main( ) int a 4=0,1,2,3,10,11,12,13,20,21,22,23; int (*lp)4, j; for (lp=a; lpa+3; lp+) for (j=0; j4; j+) printf(“%4d“,*(*lp+j); printf(“n“); ,8.2 指针与数组,8.2.1 指向数组的指针,2. 二维数组的指针,0 1 2 3,10 1

15、1 12 13,20 21 22 23,2019/5/23,25,【例8.7】通过初始化使指针指向一个字符串。 main( ) char str1 =“Good morning!“; char *str2=“Good night!“; printf(“%sn“,str1); printf(“%sn“,str2); ,8.2 指针与数组,8.2.2 指向字符串的指针变量,1. 指向字符串的指针变量的定义及初始化,字符串的两种表示方式: 字符数组表示方式,字符串存放在一维数组中,引用时用数组名。 字符指针变量表示方式,字符指针变量存放字符串的首地址,引用时用指针变量名。,Good morning!,Good night!,2019/5/23,26,【例8.8】通过赋值运算使字符指针变量指向一个字符串。 #include main( ) char c80,*str; strcpy(c,

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

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

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