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

指针的概念学习课件

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

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

指针的概念学习课件

第第8章章 指针指针8.1 指针概念指针概念指针是指针是C的一个重要概念。其特点是:的一个重要概念。其特点是:能有效地表示复杂的数据结构;能有效地表示复杂的数据结构;能动态地分配内存,能动态地分配内存,直接处理内存地址;直接处理内存地址;能方便、有效地使用字符串和数能方便、有效地使用字符串和数组;组;能在调用函数后获得多个值。能在调用函数后获得多个值。C中定义的变量,在编译时按变量的类型来分配一中定义的变量,在编译时按变量的类型来分配一定长度的内存单元。在运行时,根据变量名与地址的对定长度的内存单元。在运行时,根据变量名与地址的对应关系,相应地存取变量的数据。这种按变量地址存取应关系,相应地存取变量的数据。这种按变量地址存取变量值的方法称为变量值的方法称为“直接访问直接访问”方式。方式。如如果果变变量量的的地地址址也也存存放放在在某某一一个个内内存存单单元元,则则存存取取方方式式为为先先找找到到存存放放变变量量的的地地址址单单元元,再再取取变变量量的的值值,这这种方式称为种方式称为“间接访问间接访问”方式。如:方式。如:p=&i;/将将变变量量 i 的的地地址址存存放放到到变变量量p“指指向向”的的内内存存单单元元中中 /8.1.1.变量的指针和指向变量的指针变量变量的指针和指向变量的指针变量*p=3;/将将3赋给指针变量赋给指针变量p所指向的变量所指向的变量 /变量的指针就是变量的地址变量的指针就是变量的地址,即,即p的值。也就是说的值。也就是说,指针变量的值就是指针变量的值就是该指针变量所指变量的内存首地址。该指针变量所指变量的内存首地址。在在p的前面加上一个的前面加上一个“*”,即,即*p就表示指针变量就表示指针变量p所指向的变量。所指向的变量。从右图可知从右图可知:*p也是一个变量,且与变量也是一个变量,且与变量 i 是同是同一回事。一回事。i=3;p=&i;p1,p2为指向整型变量为指向整型变量i,j的指针变量。即:的指针变量。即:p1=&i;p2=&j;说明说明:类型可以是整型、实型、字符型等。类型可以是整型、实型、字符型等。标识符前的标识符前的“*”表示该变量为指针变量。表示该变量为指针变量。指针变量只能指向指针变量只能指向同一类型的变量。同一类型的变量。上述的指针变量是上述的指针变量是p1、p2,而不而不是是*p1、*p2。*p1和和*p2是是p1和和p2所指向的变量所指向的变量 i 和和 j。指针变量中只能存放地址。指针变量中只能存放地址。p1=100;*p1=&i;非法非法8.1.2指针变量的定义指针变量的定义定义形式:定义形式:类型标识符类型标识符 *标识符;标识符;指针变量必须定义为指针变量必须定义为“指针类型指针类型”。如:如:int i,j;int*p1,*p2;与指针有关的运算符:与指针有关的运算符:&取地址运算符。取地址运算符。如:如:&a为变量为变量a的地址。的地址。*指针运算符。指针运算符。如:如:*p为指针变量为指针变量p所指向的变量。所指向的变量。*运算和运算和&运算互为逆运算。运算互为逆运算。8.1.3 指针变量的引用指针变量的引用&p为指针变量为指针变量p的地址。的地址。&(*p)的结果为的结果为p,即变量即变量*p的地址。的地址。*(&i)表示访问变量表示访问变量 i 的地址,其结果就是的地址,其结果就是 i 本身。本身。p=&i;是将变量是将变量 i 的地址赋给指针变量的地址赋给指针变量p。指指针针变变量量p的的内内容容为为地地址址量量;*p为为指指针针p的的目目标标量量,内内容容为为数数据,即指针变量据,即指针变量p所指向的变量的值。所指向的变量的值。*p=i;是将变量是将变量i的值赋给目标变量的值赋给目标变量*p。运行结果:运行结果:100,10100,10例例8.1main()int a,b;int*p1,*p2;a=100;b=10;p1=&a;p2=&b;/将变量将变量a和和b的地址赋给指针变量的地址赋给指针变量p1和和p2 /printf(“%d,%dn”,a,b);printf(“%d,%dn”,*p1,*p2);/*p1和和*p2就是变量就是变量a和和b /若先执行若先执行p1=&a;再执行再执行&*p1;是什么是什么意思?意思?这里这里“&”和和“*”的优先级相同,的优先级相同,但按但按“自右至左自右至左”结合结合,即即&*p1与与&a相同。相同。若先执行若先执行p1=&a;则则*&a和和*p1的作的作用相同。即:用相同。即:*&a与与a是等价的。是等价的。说明:说明:而而p2=&*p1;的作用是将的作用是将&a 赋给赋给p2。(*p1)+等价于等价于a+。注意注意:括号是必须的,否则就成括号是必须的,否则就成为为*(p1+)。这时先按这时先按p1的原值的原值进行进行*运算得到运算得到a的值。然后使的值。然后使p1的值改变,则的值改变,则p1不再指向不再指向a了。了。注意:注意:此例中此例中a和和b并未交换,而并未交换,而p1和和p2的值改变。的值改变。例例8.2main()int*p1,*p2,*p,a,b;scanf(“%d,%d”,&a,&b);p1=&a;p2=&b;if(ab)p=p1;p1=p2;p2=p;printf(“a=%d,b=%dn”,a,b);printf(“max=%d,min=%dn”,*p1,*p2);运行情况:运行情况:5,9 a=5,b=9max=9,min=58.2 8.2 指针的运算指针的运算8.2.1 指针的算术运算主要为+-+-P+、p 分别表示向后、向前移一个单元。P+n、p-n 分别表示向后、向前移n个单元。8.2.2 指针的关系运算主要为=、!=两种。当两个指针p1与p2指向同一地址时,p1=p2为真,当两个指针p1与p2不指向同一地址时,p1!=p2为真。8.3.1 指向一维数组的指针指向一维数组的指针例例:int a10,*p;p=&a0;/将将a0元素的地址赋给指针变量元素的地址赋给指针变量p /在在C中中,数数组组名名代代表表数数组组的的首首地地址址。因因此此p=a;与与p=&a0;是是等等价价的。的。注注:p=a;是是将将a 数数组组的的首首地地址址赋赋给给指指针针变变量量p。但但这这里里的的a 并并不不代代表整个数组。表整个数组。可以通过指针引用数组元素可以通过指针引用数组元素 若若p=a;是是将将整整型型数数组组a的的首首地地址址赋赋给给整整型型指指针针变变量量 p,则则*p=5;是将整数是将整数5赋给赋给a数组的第一个元素数组的第一个元素a0,等价于等价于a0=5。p+1表表示示指指针针变变量量p当当前前所所指指的的数数组组元元素素的的下下一一个个元元素素。但但p+1 不不是是p的的值值加加 1。若若有有p=&a0;则则 p+i(或或a+i)就就是是 ai 的的地地址址(因为因为a代表数组代表数组a的首地址的首地址)。若若有有p=&a0;则则*(p+i)或或*(a+i)就就是是p+i或或a+i所所指指向向的的数数组组元元素,即素,即ai。也就是说也就是说*(p+i)=*(a+i)=ai。指向数组的指针变量可以带下标,如:指向数组的指针变量可以带下标,如:pi 与与*(p+i)是等价的。是等价的。8.3 指针与数组指针与数组也可写成如下:也可写成如下:main()int a10,*p=a,i;for(i=0;i10;i+)scanf(“%d”,p+);printf(“n”);p=a;/此语句必不可少此语句必不可少 /for(i=0;i10;i+,p+)printf(“%d”,*p);例例8.3 输出有输出有10个元素的整型数组个元素的整型数组a的元素值。的元素值。main()int a10,*p,i;for(i=0;i10;i+)scanf(“%d”,&ai);printf(“n”);for(p=a;p(a+10);p+)printf(“%d”,*p);要要注注意意指指针针变变量量的的运运算算。如如果果p指指向向数数组组a(即即p=a),则:则:p+(或或p+=1)表表示示p指指向向下下一一个个元元素素;*p表表示示取取得得当当前前所指元素之值。所指元素之值。*p+等价于等价于*(p+),相当于相当于ai+,表示先表示先*p,再再p+1p。*p 等等价价于于*(p),相相当当于于ai,表表示示先先*p,再再p1p。*(+p)相当于相当于a+i,表示表示p+1p,再再*p。*(p)相当于相当于a i,表示表示p1p,再再*p。(*p)+表示表示p所指之元素的值加所指之元素的值加1,不是指针值加,不是指针值加1。即即ai+1。要注意指向数组的指针变量的当前值,因为指针可以要注意指向数组的指针变量的当前值,因为指针可以指向数组最后一个元素以后的内存单元。指向数组最后一个元素以后的内存单元。设二维数组设二维数组a定义如下:定义如下:static int a34=1,3,5,7,9,11,13,15,17,19,21,23;a 代代表表整整个个二二维维数数组组的的首首地地址址,也也就就是是0行行的的首首地地址址。a+1、a+2分分别别代代表表1行行和和2行行的的首首地地址址。同同样样,a0或或&a00、a1或或&a10、a2或或&a20也分别代表也分别代表0行、行、1行、行、2行的首地址。行的首地址。a0等等价价于于*(a+0)、a1等等价价于于*(a+1),ai等等价价于于*(a+i)。因因此此,a0+1和和*(a+0)+1的的值值都都是是&a01;a1+2和和*(a+1)+2的值为的值为&a12。*(a+1)+2不能写成不能写成*(a+1+2),否则就变成否则就变成*(a+3),即即a3。因因a0+1和和*(a+0)+1是是a01的的地地址址,则则*(a0+1)就就是是a01的的值值,同同理理,*(*(a+0)+1)或或*(*a+1)是是a01的的值值,*(a i+j)或或*(*(a+i)+j)是是a i j的值。的值。8.3.2 指向多维数组的指针指向多维数组的指针务必记住务必记住:*(a+i)和和 a i 是等价的。是等价的。如果如果 a 是一维数组名,则是一维数组名,则a i 代表第代表第 i+1个元素所占的个元素所占的内存单元。但如果内存单元。但如果a是二维数组,则是二维数组,则a i 代表一维数组名,代表一维数组名,a i 本身是不占用内存单元的本身是不占用内存单元的,也不存放元素值,而只是也不存放元素值,而只是一个地址。一个地址。a、a+i、a i、*(a+i)、*(a+i)+j、a i+j都是地都是地址,而址,而*(a i+j)、*(*(a+i)+j)是二维数组元素是二维数组元素a i j的值。的值。在二维数组中在二维数组中&a i 并不是并不是a i 单元的物理地址,但能单元的物理地址,但能得到得到i行的首地址。虽然行的首地址。虽然&a i 和和a i 的值是相同,但含义的值是相同,但含义不同。不同。&a i 或或a+i表示行,而表示行,而a i 或或*(a+i)表示列。表示列。在一维数组中在一维数组中a+i所指的是第所指的是第i个数组元素的存储单元;个数组元素的存储单元;在二维数组中,在二维数组中,a+i=a i=*(a+i)=&a i=&a i 0,都都表示表示 i 行行0列元素的地址。列元素的地址。例例8.4 输出二维数组中任一行任一列的元素。输出二维数组中任一行任一列的元素。main()static int a34=1,3,5,7,9,11,13,15,17,19,21,23;int(*p)4,i,j;p=a;scanf(“i=%d,j=%d”,&i,&j);printf(“a%d,%d=%dn”,i,j,*(*(p+i)+j);运行情况:运行情况:i=1,j=2 /*注意这里的输入格式注意这里的输入格式 */a1,2=13程序中的程序中的“int(*p)4”表示表示 p 是一个指向包含是一个指向包含4个元个元素的一维数组的指针变量,即素的一维数组的指针变量,即p

注意事项

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

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




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