电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPT文档下载
分享到微信 分享到微博 分享到QQ空间

指针详解

  • 资源ID:55911402       资源大小:802.50KB        全文页数:53页
  • 资源格式: PPT        下载积分:13金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要13金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

指针详解

第10章 指针,本章主要内容:1. 指针的基本概念2. 各种类型的指针:数组的指针、字符串的指针、函数的指针、指针的指针等,指针的优点:(1)可有效地表示复杂的数据结构;(2)动态分配内存;(3)方便地使用字符串,数组;(4)直接处理内存地址等。 指针的缺点:概念繁杂,使用时较灵活,不易掌握。,§10.1 地址和指针的概念,在计算机中,所有的数据都是存放在存储器中的。 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等。为了正确地访问这些内存单元, 必须为每个内存单元编上号。 根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。 既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。,变量与地址,程序中: short i; float k;,内存中每个字节有一个编号-地址,i,k,变量是一块存储空间 变量的地址就是指针,§10.1 地址和指针的概念,一、关于内存,内存单元的指针和内存单元的内容是两个不同的概念。对于一个内存单元来说,单元的地址即为指针, 其中存放的数据才是该单元的内容。在语言中, 允许用一个变量来存放指针,这种变量称为指针变量。因此, 一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。,二、关于变量的访问 1. 直接访问:根据变量名直接访问变量。int i;i=3;printf(“%d”,i);2. 间接访问:将变量的地址存放于另一变量问题:如何获得一个变量的地址?如何保存一个变量的地址?,如何获得一个变量的地址?, 则&a获得变量的地址,如何保存一个变量的地址?,将变量的地址放在另一个(变量)中,三、若干术语1. 指针:一个变量的地址,称为该变量的指针。2. 指针变量:专门用来存放另一变量的地址(指针)的变量,称为指针变量。3. 指向:指针变量指向变量。,pt指向a,§10.2 变量的指针和指向变量的指针变量一、指针变量的定义一般形式: 类型标识符 * 标识符;例如:float * pf;int * p1,* p2;说明: (1)定义时,标识符前面的“ * ”表示该变量为指针变量,上例中变量名为p1,p2。 (2)类型标识符指出p1、p2所指向的变量的类型。,二、指针变量的引用 两个相关运算符: 1& 取地址运算符。,例: int a, *pt; 若: pt=&a,2* 指针运算符(间接访问运算符)*pt为指针变量pt所指向的变量.*pt等价于a*pt=10; 相当于a=10,pt指向a,例: main() int a,b;int *pointer_1,*pointer_2;a=100;b=10;pointer_1= ,a,b,pointer_1,pointer_2,100,10,&a,&b,例:输入两个整数a,b,按大小顺序输出。main() int a,b,*p1,*p2,*p;scanf(“%d%d”,a,b,p1,p2,3,4,&b,p,&a,&a,&b,&a,注意: 1、指针变量必须先赋值,再使用,只能保存地址 例如:int *p,*p1,a=10;*p=20;printf(”%d”,*p1);,3、则: &a、pt 、 &*pt是等价的则: *&a、*pt、a 是等价的,2、一个指针变量只能指向同一类型的变量。 int a,*p;float f; p=,三、指针变量作为函数参数 实参形参:传去的是地址值,分占不同空间。1、指针变量作形参,在函数内部可以改变函数外部变量的值例:输入两个整数,从大到小输出。,void swap(int*,int*); main() int a,b; int *p1,*p2;scanf(“%d,%d”, ,a,b,p1,p2,q1,q2,&a,&b,3,4,&a,&b,q,3,4,3,2、指针变量作形参,可以用来保存函数的返回值(输出型形参)例:写一个函数,功能是求出一维整型数组中的最大值和最小值。,void maxmin(int a, int n, int *pmax, int *pmin) int i; *pmax=*pmin=a0;for(i=1;i*pmax) *pmax=ai;if(ai<*pmin) *pmin=ai; void main( ) int a10=0,9,-5,4,23,87,34,2,65,-45;int max,min;maxmin(a,10, ,课上练习,看程序写结果: void ast(int x,int y,int *cp,int *dp) *cp=x+y; *dp=x-y; void main() int a,b,c,d;a=4;b=3;ast(a,b, ,答案:7,1,10.3 数组的指针和指向数组的指针变量,一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。 所谓数组元素的指针就是数组元素的地址。,一、指向数组元素的指针 1.定义: int a10,*p; 注意:如果数组为int型,则指针变量的基类型亦应为int型。2. 赋值: p=,把0元素的地址赋给指针变量。也就是使指向数组的第号元素,如图:,说明:c语言规定数组名(不包括形参数组名),代表数组中首元素(下标为0的元素)的地址。p= */ 习题集第七单元 一、8,9,10,36,二、通过指针引用数组元素 int a10,*p; 若p=a; 则*p=1 等价于 a0=1 p+1含义是什么?C中规定:若p=&a0, 则p+1指向下一个元素,不是简单的 加1。,因此,如果int a10,*p;p=a;则有以下关系:(1) p+i a+i &ai。(2) *(p+i) *(a+i) ai。(3) 指向数组元素的指针变量也可带下标:pi *(p+i) 。即有*(p+i) *(a+i) ai pi,练习(习题集7单元二、3),阅读程序,写结果 void main() int a =2,4,6,8,10;int y=1,x,*p;p= ,y=19,例:输出数组中全部元素。 (设a数组,整型,10个元素),(1)下标法 void main ( ) int a10;int i;for (i=0;i<10;i+)scanf(“%d“, ,(2)用数组名计算数组元素地址法void main ( ) int a10;int i;for (i=0;i<10;i+)scanf(“%d“,a+i);printf(“n“);for (i=0;i<10;i+)printf(“%3d“,*(a+i); ,(3)用指针变量法1:main( ) int *p,i,a10;p= ,/ p=a;,/ p=a;,用指针变量法2 main( ) int *p,i,a10;p=a;for(i=0;i<10;i+)scanf(“%d“, p+);printf(“n“); for (p=a;p<(a+10);p+)printf(“%3d“,*p ); ,3,5,-4,12,在使用指针变量时应注意的几个问题:1. 数组名是数组的首地址,因此 p=&a0 与 p=a 等价。2指针变量可以实现使本身的值改变,数组名不可以。例: p+正确 a+不正确3要注意指针变量的当前值,指针变量可以指到数组后的内存单元。即指针变量的越界问题4注意指针变量的运算,若先使p指向数组a(即p=a),则(1) p+ (或p+=1) 指向下一个元素。(2) *p+等价于*(p+)先得到p指向的变量的值,p再加1。(3) *(p+)与*(+p)作用不同,前者先取*p,后使p加1;后者相反。(4) (*p)+表示p所指向的元素值加1。(5) 若p当前指向a数组第i个元素,则:*(p-)相当于ai-,先取p值作“*“运算,再使p自减;*(+p)相当于a+i,先使p自加,再作“*“运算;*(-p)相当于a-i,先使p自减,再作“*“运算。,void main() int a10,b10,i;int *pa,*pb;pa=a;pb=b;for(i=0;i<10;i+)scanf(“%d”,pb+);pb=b; /*必不可少,否则出现越界*/for(i=0;i<10;i+) *pa=*pb;pa+;pb+;pa=a; /*必不可少,否则出现越界*/for(i=0;i<10;i+)printf(“%5d”,*pa+); ,例:编程实现把整型数组b中的所有元素拷贝到数组a中。,习题集第七单元 一、1,14,15,16,17,18,19,20,二、数组名作函数参数(P235),内容回顾: 数组名做函数参数,当发生函数调用时实参传递给形参是什么?,int sum(int arr,int n) int s=0,i;for(i=0;i<n;i+)s+=ai;return s; ,void main() int array5=1,2,3,4,5,i,s;s=sum(array,5);printf(“sum=%dn”,s); ,实参传递给形参是实参数组的首地址 实际上,形参数组名就是一个指针变量int sum(int arr,int n)等价于int sum(int * arr,int n),2,3,4,7,9,void inv(int *x, int n),例10.7:将数组a中n个整数按相反顺序存放。,void inv(int x, int n),void inv(int *x, int n) int temp,*p1,*p2,m;m=n/2;p1=x; p2=x+n-1;for ( ;p1<x+m;p1+,p2-) temp=*p1;*p1=*p2;*p2=temp; ,void main() int a5=1,2,3,4,5;int i;inv(a,5);for(i=0;i<5;i+)printf(“%4d”,ai); ,如果有一个实参数组,想在函数中改变此数组,实参与形参的对应关系有以下几类情况:,例10.9:用选择法对10个整数排序。,void sort(int x, int n) int i,j,k,t;for (i=0;ixk) k=j;if (k!=i) t=xi; xi=xk; xk=t; ,main ( ) int *p,i,a10;p=a;for (i=0;i<10;i+)scanf(“%d“,p+);p=a;sort(p,10);for (p=a,i=0;i<10;i+)printf(“%d“,*p+); ,(1) 形参用数组名, 实参用指针变量,sort(a,10);也行,(2) 形参用指针变量, 实参用数组名,void sort(int *x, int n) int i,j,k,t;for (i=0;i*(x+k) k=j;if (k!=i) t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;,main ( ) int i,a10;for (i=0;i<10;i+)scanf(“%d“, ,

注意事项

本文(指针详解)为本站会员(给****)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.