语言程序设计第9章课件

上传人:我*** 文档编号:144762063 上传时间:2020-09-14 格式:PPT 页数:55 大小:358.50KB
返回 下载 相关 举报
语言程序设计第9章课件_第1页
第1页 / 共55页
语言程序设计第9章课件_第2页
第2页 / 共55页
语言程序设计第9章课件_第3页
第3页 / 共55页
语言程序设计第9章课件_第4页
第4页 / 共55页
语言程序设计第9章课件_第5页
第5页 / 共55页
点击查看更多>>
资源描述

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

1、1,第8章 指 针,C 语言程序设计,池州师专 计算机中心,2020/9/13,2,8.1 指针和指针变量 8.2 指针与数组 8.3 指针与函数,第8章 指针,2020/9/13,3,8.1 指针和指针变量,main() float x; int y; ,8.1.1 指针和指针变量的概念,变量的两个物理意义,变量的内容,变量的地址,2020/9/13,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、接存取”方式。,2020/9/13,5,C 语言还提供了对内存单元的“间接存取”方式,5,3,2004,a和b相加的结果(*p=a+b)存放到变量p所指向的内存单元中去。此时c称为指针变量p的目标变量。,p= p = ,8.1 指针和指针变量,8.1.1 指针和指针变量的概念,变量的地址称为变量的指针 存放地址的变量称为指针变量,2020/9/13,6,main() int a,*p= ,2004,8.1 指针和指针变量,8.1.2 指针变量的定义,2000,指针变量初始化,2020/9/13,7,main() int a,*p= ,间接存取运算,2004,8.1 指针和指针变量,8.1.3

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

4、针的基本运算,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(类型))的。 两个指针变量不能作加法运算,只有当两个指针变量指向同一数组时,进行指针变量相减才有实际意义。如:p2-p1。,2020/9/1

5、3,11,指针的关系运算,8.1 指针和指针变量,8.1.3 指针的基本运算, 指向同一数组的两个指针可以进行关系运算,表明它们所指向元素的相互位置关系 。如:p2 p1、p2 = p1。 指针与一个整型数据进行比较是没有意义的 。 不同类型指针变量之间比较是非法的。 NULL可以与任何类型指针进行=、!=的关系运算,用于判断指针是否为空指针 。,2020/9/13,12, 数组名是该数组的指针 a是数组的首地址(即a0的地址),是一个指针常量。 a = ,2020/9/13,13,当p指向a0时,用p表示数组元素 下标法: p0,p1, ,pi, ,p9 指针法: *(p+0),*(p+1)

6、, ,*(p+i), ,*(p+9),8.2 指针与数组,8.2.1 指向数组的指针,1. 一维数组的指针, 指向一维数组元素的指针变量 由于数组元素也是一个内存变量,所以此类指针变量的定义和使用与指向变量的指针变量相同。例如:int a10,*p; p = a;(或 p = ),a,2020/9/13,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

7、; 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 3 4 5 6 7 8 9 10,1 2 3 4 5 6 7 8 9 10,2020/9/13,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.

8、 一维数组的指针,10,2020/9/13,16,数组名是地址,指向数组的指针变量存放的也是地址。通过指针变量也可以引用数组元素。p = 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 指针与数组,2020/9/13,18, 二维数组的地址 例如:int a34; 二维数组名a是数组的首地址。 二维数组a包含三个行元素:a0、a1、a2 。,三个行元素的地址分别是:a、a+1、a+2。 而a0、a1、a2也是地址量,是一维数组名, 即*(

9、a+0)、*(a+1)、*(a+2)是一维数组首个元素地址。,8.2 指针与数组,8.2.1 指向数组的指针,2. 二维数组的指针,2020/9/13,19, 二维数组元素的地址 a0、a1、a2是一维数组名,所以ai+j是数组元素的地址。,数组元素aij的地址可以表示为下列形式: 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); ,这种指针变量的定义及使用与指向一维数组元素的指针变量是相同的,用它存放二维数组元素的地址。,2020/9/13,22,

10、 指向一维数组的指针变量 指向一维数组指针变量的定义形式: 数据类型标识符 (*变量名)元素个数,8.2 指针与数组,8.2.1 指向数组的指针,2. 二维数组的指针,“*”表示其后的变量名为指针类型,元素个数表示 目标变量是一维数组,并说明一维数组元素的个数。由于 “*”比“ ”的运算级别低,“*变量名”作为一个说明部 分,两边必须加括号。 “数据类型标识符”是定义一维数 组元素的类型。,2020/9/13,23,【例8.6】用指向一维数组的指针变量输出数组元素。 main( ) int a34=0,1,2,3,10,11,12,13,20,21,22,23; int (*lp)4, i,

11、j; for (lp=a, i=0; i3; i+) for (j=0; j4; j+) printf(%4d,*(*(lp+i)+j); printf(n); ,8.2 指针与数组,8.2.1 指向数组的指针,2. 二维数组的指针,0 1 2 3,10 11 12 13,20 21 22 23,2020/9/13,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(

12、%4d,*(*lp+j); printf(n); ,8.2 指针与数组,8.2.1 指向数组的指针,2. 二维数组的指针,0 1 2 3,10 11 12 13,20 21 22 23,2020/9/13,25,【例8.7】通过初始化使指针指向一个字符串。 main( ) char str1 =Good morning!; char *str2=Good night!; printf(%sn,str1); printf(%sn,str2); ,8.2 指针与数组,8.2.2 指向字符串的指针变量,1. 指向字符串的指针变量的定义及初始化,字符串的两种表示方式: 字符数组表示方式,字符串存放在一

13、维数组中,引用时用数组名。 字符指针变量表示方式,字符指针变量存放字符串的首地址,引用时用指针变量名。,Good morning!,Good night!,2020/9/13,26,【例8.8】通过赋值运算使字符指针变量指向一个字符串。 #include main( ) char c80,*str; strcpy(c,How are you ?); str=Fine,thanks.; printf(%sn%sn,c,str); ,8.2 指针与数组,8.2.2 指向字符串的指针变量,2. 字符串的赋值运算,将一个字符串赋给一个字符数组只能使用strcpy函数 将字符串常量的首地址赋给指针变量,

14、可使用赋值运算符“=”,How are you ?,Fine,thanks.,2020/9/13,27,【例8.9】利用指针变量输入输出字符串。 #include main( ) char c80,*str; str=c; gets(str); puts(str); ,8.2 指针与数组,8.2.2 指向字符串的指针变量,3. 字符串的输入输出,使用字符串输入输出函数gets和puts; 在scanf和printf函数中使用 %s格式实现。 输入字符串时,函数参数:数组名、存有数组名的指针变量; 输出字符串时,函数参数:数组名、存有字符串首地址的指针变量。,I love China!,I lo

15、ve China!,2020/9/13,28,【例8.11】已知字符串str,从中截取一子串。要求该子串是从str的第m个字符开始,由n个字符组成。 思路: 定义字符数组c 存放子串,字符指针变量p 用于复制子串,利用循环语句从字符串str截取n个字符。 考虑到几种特殊情况: m位置后的字符数有可能不足n个,所以在循环读取字符时,若读到 0 停止截取,利用break语句跳出循环。 输入的截取位置m大于字符串的长度,则子串为空。 要求输入的截取位置和字符个数均大于0,否则子串为空。,8.2 指针与数组,8.2.2 指向字符串的指针变量,2020/9/13,29,main( ) char c80,

16、 *p, *str=This is a string.; int i, m, n; printf(m,n=); scanf(%d,%d, ,8.2 指针与数组,从m位置读取n个字符送到c数组,要求位置m和长度n大于0,2020/9/13,30,指针数组定义的一般形式: 数据类型标识符 *数组名元素个数; 在这个定义中由于“ ”比“*”的优先级高,所以数组名先与“元素个数”结合,形成数组的定义形式,“*”表示数组中每个元素是指针类型,“数据类型标识符”说明指针的目标变量的数据类型。例如: int *ip10; char *cp5;,8.2 指针与数组,8.2.3 指针数组,1. 指针数组的定义,指针数组就是数组中的每个元素均为指

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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