收藏 分销(赏)

第9章-指针.ppt

上传人:丰**** 文档编号:5473116 上传时间:2024-11-10 格式:PPT 页数:47 大小:499KB
下载 相关 举报
第9章-指针.ppt_第1页
第1页 / 共47页
第9章-指针.ppt_第2页
第2页 / 共47页
第9章-指针.ppt_第3页
第3页 / 共47页
第9章-指针.ppt_第4页
第4页 / 共47页
第9章-指针.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、第第9章章 指指 针针第9章_指针ppt课件(全)第第9章章 指指 针针(pointer)9.1 指针的基本概念指针的基本概念9.2 指针与一维数组指针与一维数组9.3 指针与二维数组指针与二维数组9.4 指针与字符串指针与字符串9.5 指针与函数指针与函数9.6 指针数组与多级指针指针数组与多级指针第9章_指针ppt课件(全)9.1 指针的基本概念指针的基本概念#includevoid main()int a=10;float x=20.5;内存中每个字节有一个编号-地址9.1.1 变量的地址及指针变量的地址及指针地址也称为指针第9章_指针ppt课件(全)8.1.2 指针变量指针变量1指针变

2、量的定义指针变量的定义int a;int*p=&a;或或 int a,*pa=&a;2指针变量的引用指针变量的引用(1)&:取地址运算符取地址运算符(2)*:指指针针运运算算符符(或或称称间间接访问运算符接访问运算符)例如:例如:int a=6,*pa;.2000200420062005整型变量 a6指针变量 pa200120022003例如:例如:int a=6,*pa;pa=&a;2000例如:例如:int a=6,*pa;pa=&a;*pa=28;28第9章_指针ppt课件(全)【例【例9.0】使两个指针变量交换指向。】使两个指针变量交换指向。#include#include void

3、main()void main()int a=10,b=20,int a=10,b=20,*p1=&a,*p2=&b,*p*p1=&a,*p2=&b,*p;printf(a=printf(a=%d%d,b=,b=%d%d,*p1,*p1=%d=%d,*p2,*p2=%d=%dn,a,b,*p1,*p2);n,a,b,*p1,*p2);p=p1;p1=p2;p2=p;p=p1;p1=p2;p2=p;printf(aprintf(a=%d,=%d,b=b=%d%d,*p1,*p1=%d=%d,*p2,*p2=%dn=%dn,a,b,*p1,*p2);,a,b,*p1,*p2);运行结果如下:运行结

4、果如下:a=10,b=20,*p1=10,*p2=20a=10,b=20,*p1=20,*p2=10第9章_指针ppt课件(全)3使用指针应注意的几种情况使用指针应注意的几种情况(1)在指针变量中只能存储地址在指针变量中只能存储地址,例如:,例如:int a,*p,*q;p=2000;/*不正确不正确 */q=&a;/*正确正确 */(2)语句语句“int a,*p=&a;”与与“int a,*p;p=&a;”是等价的是等价的 但但“int a,*p;*p=&a;”中的赋值语句是错误的。中的赋值语句是错误的。(3)悬挂指针悬挂指针 指针变量的值不确定的指针称为悬挂指针。指针变量的值不确定的指针

5、称为悬挂指针。如:如:int*p;*p=56;第9章_指针ppt课件(全)9.1.3 指针运算指针运算1指针之间的赋值运算指针之间的赋值运算2指针与整数的加、减指针与整数的加、减运算运算3指针相减运算指针相减运算4指针之间作关系运算指针之间作关系运算例如:例如:float x,*p1,*p2=&x;p1=p2;例如:例如:int a4=10,11,12,13,*pa;pa=a;pa=pa+1;如果两个指针指向如果两个指针指向同一数组同一数组的元素上,则两指针相减,的元素上,则两指针相减,其其绝对值绝对值的物理意义是两指的物理意义是两指针间相距多少个元素。针间相距多少个元素。指针间作关系运算,可

6、以判指针间作关系运算,可以判断指针是否指向断指针是否指向同一数组同一数组或或同一元素同一元素上。上。第9章_指针ppt课件(全)9.1.4 指针作为函数的参数指针作为函数的参数【例【例9.1】编写函数编写函数swap1,交换两个变量的值。交换两个变量的值。#include void main()float a,b;void swap1(float*x,float*y);scanf(%f%f,&a,&b);swap1(&a,&b);printf(a=%.1f b=%.1fn,a,b);void swap1(float*x,float*y)float t;t=*x;*x=*y;*y=t;程序运行情

7、况:程序运行情况:3.4 5.6 a=5.6 b=3.4第9章_指针ppt课件(全)9.2 指针与一维数组指针与一维数组9.2.1 一维数组元素的表示一维数组元素的表示1下标表示法和指针表示法下标表示法和指针表示法 int a5=10,11,12,55,14;下标表示法下标表示法:a i 指针表示法指针表示法:*(a+i)第9章_指针ppt课件(全)【例【例9.补充】查看数组元素的补充】查看数组元素的地址地址及数组元素的及数组元素的值值。#include void main()int i,a4=10,11,12,13;for(i=0;i4;i+)printf(%x,%dn,a+i,*(a+i)

8、;运行结果:运行结果:ffd2,10ffd4,11ffd6,12ffd8,13第9章_指针ppt课件(全)2用指针变量引用一维数组元素用指针变量引用一维数组元素【例【例9.2】用指针变量给数组赋值,输出各元素值及其和。】用指针变量给数组赋值,输出各元素值及其和。#include void main()int a10,i,j,s;int*p;for(p=a;pa+10;p+)scanf(%d,p);p=a;for(s=0,i=0;i10;i+)s+=*(p+i);for(i=0;i10;i+)printf(%3d,pi);printf(ns=%d,s);i:0 1 2 3 4 5 6789ap&

9、ais+=aiai第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;a542101max p第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使

10、它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;a542101max p第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位

11、置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;a542101max p第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void

12、main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;a542101max p第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i

13、);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;a542101max p第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;t=*a;*a=*

14、max;*max=t;a542101max p第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;t=*a;*a=*max;*max=t;a 104251max p第9章_指针p

15、pt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;t=*a;*a=*max;*max=t;printf(%3d,*p);a 104251 p第9章_指针ppt课件(全)【例【例9.3】输入一

16、组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;t=*a;*a=*max;*max=t;printf(%3d,*p);a 104251 p第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它

17、与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;t=*a;*a=*max;*max=t;printf(%3d,*p);a 104251 p第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出

18、最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;t=*a;*a=*max;*max=t;printf(%3d,*p);a 104251 p第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个

19、元素的值交换位置,其余数据位置不变,并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;t=*a;*a=*max;*max=t;printf(%3d,*p);a 104251 p第9章_指针ppt课件(全)【例【例9.3】输入一组数据存放在数组中,找出最大值,使它与数】输入一组数据存放在数组中,找出最大值,使它与数组中的第组中的第1个元素的值交换位置,其余数据位置不变,

20、并输出个元素的值交换位置,其余数据位置不变,并输出该组数。该组数。#include void main()int i,t,a5,*p,*max;for(i=0;i5;i+)scanf(%d,a+i);max=a;for(p=a+1;pa+5;p+)if(*max*p)max=p;t=*a;*a=*max;*max=t;printf(%3d,*p);a 104251 p第9章_指针ppt课件(全)9.2.2 数组名作为函数的参数数组名作为函数的参数【例【例9.4】编写函数,将数组中的】编写函数,将数组中的n个整数从小到大排序。个整数从小到大排序。#include void main()int t

21、,b10=2,6,7,0,9,5,3,1,8,4;int i,j,k;void sort(int a ,int n);for(i=0;i10;i+)printf(%3d,bi);printf(n);sort(b,10);for(i=0;i10;i+)printf(%3d,bi);printf(n);void sort(int a ,int n)int i,k,t,j;for(i=0;in-1;i+)k=i;for(j=i+1;jaj)k=j;t=ak;ak=ai;ai=t;运行结果如下:运行结果如下:2 6 7 0 9 5 3 1 8 40 1 2 3 4 5 6 7 8 9第9章_指针ppt

22、课件(全)【例【例9.5】编写函数,完成在有序数组中插入一个数,】编写函数,完成在有序数组中插入一个数,使数组仍然有序。使数组仍然有序。#include void main()int i,n,x;void insert(int*a,int x,int*m);/*函数声明函数声明*/int b10=2,3,6,9,21,30;n=6;/*用用n表示数组表示数组b中数据的个数中数据的个数*/scanf(%d,&x);/*输入要插入的数输入要插入的数x*/insert(b,x,&n);/*函数调用函数调用*/for(i=0;i=0;i-)if(x*(a+i)*(a+i+1)=*(a+i);else

23、break;*(a+i+1)=x;(*m)+;运行情况如下:运行情况如下:5 2 3 5 6 9 21 30第9章_指针ppt课件(全)9.3 指针与二维数组指针与二维数组9.3.1 二维数组中的指针二维数组中的指针 int a34=1,2,3,4,5,6,7,8,9,10,11,12;a是一个数组名。数组是一个数组名。数组a包含包含3个元素:个元素:a0、a1、a2。而每个元素又是一个一维数组,它包含而每个元素又是一个一维数组,它包含4个元素。个元素。a00a01a02a03a10a11a12a13a20a21a22a23元素200020022004200620082010201220142

24、016201820202022地址第1行第2行第3行 a a、a0a0 a1+1a1+1a0+1a0+1 a+1 a+1、a1a1 a+2 a+2、a2a2a2+1a2+1第9章_指针ppt课件(全)(1)元素指针元素指针(列指针列指针):元素的地址:元素的地址例如,例如,aij的指针:的指针:&aij,ai+j,*(a+i)+j元素指针加元素指针加1,则指向下一个元素。,则指向下一个元素。aij的表示方法:的表示方法:aij,*(ai+j),*(*(a+i)+j)(2)行指针:每一行的首地址。行指针:每一行的首地址。二维数组名是一个行指针二维数组名是一个行指针。例如,对于二维数组例如,对于二

25、维数组a的第的第i+1行的指针为:行的指针为:a+i行指针加行指针加1,则指向数组的下一行。,则指向数组的下一行。第9章_指针ppt课件(全)9.3.2 指向二维数组元素的指针变量指向二维数组元素的指针变量1指向数组元素的指针变量指向数组元素的指针变量第9章_指针ppt课件(全)【例【例9.6】输入一个】输入一个34的矩阵到二维数组中,输出该矩的矩阵到二维数组中,输出该矩阵,并且输出它的最大值元素及行列号。阵,并且输出它的最大值元素及行列号。运行情况:运行情况:1 2 3 4 5 6 7 8 9 10 12 11 1 2 3 4 5 6 7 8 9 10 12 11max=12,i=3,j=3

26、第9章_指针ppt课件(全)2定义行指针变量定义行指针变量类型标识符类型标识符 (*指针变量名指针变量名)常量表达式常量表达式;例如:例如:int(*p)4,(*q)6,a34,b26;p=a;q=b;第9章_指针ppt课件(全)【例【例9.7】输入一个】输入一个44的矩阵到二维数组中,分别计算的矩阵到二维数组中,分别计算出二维数组中指定行,指定列的元素之和。出二维数组中指定行,指定列的元素之和。#includevoid main()int a44,(*p)4,s1,s2,i,j,n,m;for(i=0;i4;i+)for(j=0;j4;j+)scanf(%d,*(a+i)+j);scanf(

27、%d%d,&n,&m);p=a+n-1;for(s1=0,j=0;j4;j+)s1+=*(*p+j);p=a;for(s2=0,i=0;i4;i+)s2+=*(*(p+i)+m-1);printf(%d%d,s1,s2);运行结果如下:运行结果如下:1 2 3 42 3 4 54 5 6 75 6 7 81 110 12第9章_指针ppt课件(全)9.3.3 二维数组的行指针作函数参数二维数组的行指针作函数参数1行指针变量作函数形参行指针变量作函数形参第9章_指针ppt课件(全)【例【例9.8】编写函数,将】编写函数,将44矩阵的右上三角元素都设置成矩阵的右上三角元素都设置成0(包括对角线上的

28、元素),其余元素不变。(包括对角线上的元素),其余元素不变。#include void change(int(*x)4,int n,int m)int i,j;for(i=0;in;i+)for(j=0;jm;j+)if(i=j)*(*(x+i)+j)=0;void main()int a44,i,j;printf(n);for(i=0;i4;i+)for(j=0;j4;j+)aij=1+i+j;printf(%3d,aij);printf(n);change(a,4,4);printf(n);for(i=0;i4;i+)for(j=0;j4;j+)printf(%3d,aij);printf

29、(n);程序运行结果:程序运行结果:1 2 3 42 3 4 53 4 5 64 5 6 70 0 0 02 0 0 03 4 0 04 5 6 0第9章_指针ppt课件(全)2二维数组名作函数形参二维数组名作函数形参一般格式为:一般格式为:类型标识符类型标识符 数组名数组名 长度长度,int n,int m将例将例9.8的程序中的函数改写如下:的程序中的函数改写如下:void change(int x4,int n,int m)int i,j;for(i=0;in;i+)for(j=0;jm;j+)if(i=j)xij=0;第9章_指针ppt课件(全)9.4 指针与字符串指针与字符串9.4.

30、1 字符串的表示形式字符串的表示形式(1)字符串指针字符串指针,如:如:”abcd”(2)用字符数组存放字符串,如用字符数组存放字符串,如char a=”Beijing China”;(3)用字符指针变量指向字符串,如用字符指针变量指向字符串,如char*p=”a string”;或或 char*p;p=”a string”;(4)字符串的引用字符串的引用第9章_指针ppt课件(全)【例【例9.9】用字符数组名或字符指针变量引用字符串。】用字符数组名或字符指针变量引用字符串。#includevoid main()char a=Hello,Everyone;char*p=a;printf(%sn

31、%sn,a,p);运行结果:运行结果:Hello,EveryoneHello,Everyone第9章_指针ppt课件(全)9.4.2 字符串指针作函数参数字符串指针作函数参数【例【例9.10】编写函数计算字符串的长度。】编写函数计算字符串的长度。#include int length(char*s)int k=0;while(*s!=0)k+;s+;return k;void main()char a80=BeijingnChina;printf(length:%dn,length(a);第9章_指针ppt课件(全)【例【例9.11】编写函数比较两个字符串的大小。】编写函数比较两个字符串的大小

32、。#include int compare(char*a,char*b)/*比较字符串比较字符串a、b的大小,的大小,ab返回返回1,a=b返回返回0,a*b)return 1;else if(*a=*b)return 0;else return-1;第9章_指针ppt课件(全)void main()char a80,b80;int flag;/*变量变量flag存放函数存放函数compare的结果的结果*/printf(Enter the first string:);gets(a);/*输入第一个字符串输入第一个字符串*/printf(Enter the second string:);g

33、ets(b);/*输入第二个字符串输入第二个字符串*/flag=compare(a,b);printf(the first string);/*输出比较结果输出比较结果*/if(flag=0)printf(=);else if(flag0)printf();printf(the second stringn);运行情况如下:运行情况如下:Enter the first string:abcdef Enter the second string:cdef the first string the second string第9章_指针ppt课件(全)9.5 指针与函数指针与函数9.5.1 指向函

34、数的指针指向函数的指针类型标识符类型标识符(*指针变量名指针变量名)(函数形参类型函数形参类型)例如:例如:char(*f1)(int);int(*f2)(float,int);9.5.2 返回指针的函数返回指针的函数类型标识符类型标识符*函数名函数名(类型标识符类型标识符 形参形参,类型标识符类型标识符 形参形参,)例如:例如:int*fun(float x,float y)第9章_指针ppt课件(全)【例【例9.12】编写函数,返回给定的字符在字符串中第一】编写函数,返回给定的字符在字符串中第一次出现的该字符的指针。次出现的该字符的指针。#includechar*find(char*p,c

35、har c)while(*p!=0)if(*p!=c)p+;else return p;return NULL;void main()char s80,c,*p;gets(s);scanf(%c,&c);p=find(s,c);if(p=NULL)printf(no findn);else printf(the address of%c is:%xn,c,p);printf(is the%dth charactern,p-s+1);第9章_指针ppt课件(全)9.6指针数组与多级指针9.6.1 指针数组的概念指针数组的概念1指针数组的定义指针数组的定义类型标识符类型标识符*数组名数组名常量表达

36、式常量表达式;例如:例如:int*p10;char*p5=“China”,“Canada”,“Singapore”,“Romania”,“Mexico”;第9章_指针ppt课件(全)2指针数组应用举例指针数组应用举例【例【例9.13】将若干字符串按字母顺序(由小到大)输出。】将若干字符串按字母顺序(由小到大)输出。#include#include void main()char*p6=Singapore,Zambia,China,Mexico,Canada,Romania;char*temp;int i,j,k;for(i=0;i5;i+)k=i;for(j=i+1;j6;j+)if(strc

37、mp(pj,pk)0)k=j;temp=pk;pk=pi;pi=temp;for(i=0;i6;i+)puts(pi);第9章_指针ppt课件(全)9.6.2 多级指针的概念多级指针的概念多级指针定义的一般形式:多级指针定义的一般形式:类型标识符类型标识符*指针变量名指针变量名;例如:例如:int a,*p,*q;指针变量名前有一个指针变量名前有一个“*”,称为一级指针,简称指针。,称为一级指针,简称指针。有两个星号有两个星号“*”,则称为二级指针,其余类推。则称为二级指针,其余类推。第9章_指针ppt课件(全)【例【例9.14】二级指针变量的定义与引用。】二级指针变量的定义与引用。#include void main()int a=5,*pa,*ppa;pa=&a;ppa=&pa;printf(%d,%x,%x,%xn,a,pa,ppa,&ppa);printf(%d,%d,%dn,a,*pa,*ppa);运行结果如下:运行结果如下:5,fd8,65d6,fda5,5,5第9章_指针ppt课件(全)

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服