ch10(2) 指针.ppt

上传人:hyn****60 文档编号:71372920 上传时间:2023-02-03 格式:PPT 页数:12 大小:162KB
返回 下载 相关 举报
ch10(2) 指针.ppt_第1页
第1页 / 共12页
ch10(2) 指针.ppt_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《ch10(2) 指针.ppt》由会员分享,可在线阅读,更多相关《ch10(2) 指针.ppt(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C 语言第二十五讲主讲教师:谢本亮一、定义方法一、定义方法二、指针变量的赋值二、指针变量的赋值三、指针变量的应用三、指针变量的应用四、指针变量做函数参数四、指针变量做函数参数例例10.4:编写一个函数实现两个数的交换编写一个函数实现两个数的交换#include void swap(int x,inty)int t;t=x;x=y;y=t;void main()int a=3,b=5;swap(&a,&b);printf(“%d%dn”,a,b);#include void swap(int*x,int*y)int t;t=*x;*x=*y;*y=t;void main()int a=3,b=5

2、;swap(&a,&b);printf(“%d%dn”,a,b);10.2 指针变量的定义和引用指针变量的定义和引用 a2A02 b2C163 5 x4012 y46103 5 5 3 一、定义方法一、定义方法二、指针变量的赋值二、指针变量的赋值三、指针变量的应用三、指针变量的应用四、指针变量做函数参数四、指针变量做函数参数例例10.4:编写一个函数实现两个数的交换编写一个函数实现两个数的交换#include void swap(int x,inty)int t;t=x;x=y;y=t;void main()int a=3,b=5;swap(&a,&b);printf(“%d%dn”,a,b)

3、;#include void swap(int*x,int*y)int t;t=*x;*x=*y;*y=t;void main()int a=3,b=5;swap(&a,&b);printf(“%d%dn”,a,b);void swap(int*x,int*y)int*t;t=x;x=y;y=t;void swap(int*x,int*y)int*t;*t=*x;*x=*y;*y=*t;?指针指针t没有指向!没有指向!10.2 指针变量的定义和引用指针变量的定义和引用 a2A02 b2C163 5 x4012 y46102A02 2C16 53 有问题吗?有问题吗?#include void

4、swap(int*x,int*y)int t;t=*x;*x=*y;*y=t;void main()int a,b,c;printf(“Enter data a,b,c:”);scanf(“%d%d%d”,&a,&b,&c);if(ab)swap(&a,&b);if(ac)swap(&a,&c);if(bc)swap(&b,&c);printf(“%d,%d,%dn”,a,b,c);思考:四个数排序输出,需多少次思考:四个数排序输出,需多少次两两比较及交换?两两比较及交换?6次例例10.5:输入输入a,b,c三个数,按大小顺序输出。三个数,按大小顺序输出。一、一维数组与指针一、一维数组与指针4

5、533173520213501523apa0 a1 a9 3A00 2 4 6 8 A C E 10 121、数组是、数组是连续存放连续存放的若干个元素的集合的若干个元素的集合2、数组名就是指向此数组第一个元素的指针、数组名就是指向此数组第一个元素的指针(首地址首地址)如:如:int a10,*p;则则 p=a 等价于等价于 p=&a0;3、某一元素的地址:某一元素的地址:p=&ai 用指针引用该元素:用指针引用该元素:*pai4、数组元素的下标在内部实现时,统一按数组元素的下标在内部实现时,统一按“基地址位移基地址位移”的方式处理的方式处理故表示数组元素的地址可以用:故表示数组元素的地址可以

6、用:pi、ai 表示数组元素的内容可以用:表示数组元素的内容可以用:ai、*(pi)、*(ai)数组名数组名a(数组的指针数组的指针)与指向数组首地址的指针变量与指向数组首地址的指针变量p不同,不同,a不是变量不是变量10.3 指针和数组指针和数组即:即:a a1 ai下标表示法下标表示法指针表示法指针表示法指针表示法指针表示法例例10.6:读程序,写出结果读程序,写出结果#include void main()int a=3,b=5;int*p=&a;printf(“%dn”,*p);*p=4;p=&b;printf(“%dn”,*p);*p=6;printf(“%d,%dn”,a,b);3

7、54,6#include void main()int i,a5;int*p;for(i=0;i5;i+)p=&ai;ai=i;printf(“%3d”,*p);printf(“n”);0 1 2 3 4#include void main()int i,a5;int*p=a;for(i=0;i5;i+,p+)*p=i;printf(“%3d”,*p);printf(“n”);一维数组在内存中的存放形式:一维数组在内存中的存放形式:3A00 2 4 6 8 A C E 10 12 14 16 18首地址首地址p=a(或或&a0)数组名数组名某元素的地址某元素的地址p=ai一、一维数组与指针一、

8、一维数组与指针10.3 指针和数组指针和数组45331735202135015232827下一元素的地址下一元素的地址&ai+1p+1数组指针、指针变量与数组元素之间的关系:数组指针、指针变量与数组元素之间的关系:设有设有int a10,*p=a;则则指针变量指针变量ppp+1p+2p+i.p+9数组指针数组指针aaa+1a+2a+i.a+9数组元素数组元素&a0&a1&a2&ai.&a9地地址址关关系系指针变量指针变量p*p*(p+1)*(p+2)*(p+i).*(p+9)数组指针数组指针a*a*(a+1)*(a+2)*(a+i).*(a+9)数组元素数组元素a0a1a2ai.a9内内容容关

9、关系系一、一维数组与指针一、一维数组与指针10.3 指针和数组指针和数组4533173520213501523apa0 a1 a9 3A00 2 4 6 8 A C E 10 12例例10.7(数组的使用数组的使用)#includevoid main()int i,a5,*p=a;printf(“Input 5 numbers:n”);for(i=0;i5;i+)scanf(“%d”,&ai);printf(“Output these numbers:n”);for(i=0;i5;i+)printf(“%d”,ai);printf(“n”);scanf(“%d”,a+i);scanf(“%d”

10、,p+i);printf(“%d”,*(a+i);printf(“%d”,*(p+i);一、一维数组与指针一、一维数组与指针10.3 指针和数组指针和数组4533173520213501523apa0 a1 a9 3A00 2 4 6 8 A C E 10 12二、指针的运算二、指针的运算1、赋值运算赋值运算 如:如:p=&x p=a p=NULL注:指针类型相同。注:指针类型相同。2、赋值运算赋值运算 用法:用法:指针指针 整数整数 如:如:a+i、p i注:只能用于数组元素的引用,注:只能用于数组元素的引用,注意下标的有效范围。注意下标的有效范围。3、指针相减运算:求两地址的间距指针相减运

11、算:求两地址的间距 用法:用法:指针指针-指针指针 如:如:p-a注:两个指针的类型相同,并指注:两个指针的类型相同,并指向同一连续的存储区域。向同一连续的存储区域。4、移动指针移动指针(+、-):如:如:p+pa-注:对数组名不能实施该运算。注:对数组名不能实施该运算。5、比较运算:比较运算:用法:用法:指针指针 运算符运算符 指针指针 如:如:pq 依据:地址依据:地址注意注意:25运算通常用于运算通常用于 指向数组的指针指向数组的指针一、一维数组与指针一、一维数组与指针10.3 指针和数组指针和数组4533173520213501523apa0 a1 a9 3A00 2 4 6 8 A

12、C E 10 12例例10.8:将数组将数组a的数据复制到数组的数据复制到数组b中并输出出来。中并输出出来。#include#define M 7void main()int i,aM=23,15,50,3,21,20,35;int bM;for(i=0;iM;i+)bi=ai;printf(“Output these numbers:n”);for(i=0;iM;i+)printf(“%d”,bi);printf(“n”);二、指针的运算二、指针的运算一、一维数组与指针一、一维数组与指针10.3 指针和数组指针和数组4533173520213501523apa0 a1 a9 3A00 2 4

13、 6 8 A C E 10 12#include#define M 7void main()int i,aM=23,15,50,3,21,20,35;int bM;int*p=a,*q=b;for(i=0;iM;i+)*q=*p;q+;p+;printf(“Output these numbers:n”);for(i=0;iM;i+)printf(“%d”,bi);printf(“n”);二、指针的运算二、指针的运算一、一维数组与指针一、一维数组与指针10.3 指针和数组指针和数组例例10.8:将数组将数组a的数据复制到数组的数据复制到数组b中并输出出来。中并输出出来。453317352021

14、3501523apa0 a1 a9 3A00 2 4 6 8 A C E 10 12#include#define M 10void main()int i,aM=23,15,50,3,21,20,35,17,33,45;int bM;int*p=a,*q=b;for(i=0;iM;i+)*q+=*p+;printf(“Output these numbers:n”);for(i=0;iM;i+)printf(“%d”,bi);printf(“n”);printf(“%d”,*q+);结果如何结果如何?q=b;二、指针的运算二、指针的运算一、一维数组与指针一、一维数组与指针10.3 指针和数组指针和数组例例10.8:将数组将数组a的数据复制到数组的数据复制到数组b中并输出出来。中并输出出来。4533173520213501523apa0 a1 a9 3A00 2 4 6 8 A C E 10 12

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

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com