ImageVerifierCode 换一换
格式:PPTX , 页数:54 ,大小:610.35KB ,
文档编号:3376912      下载积分:28 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-3376912.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(三亚风情)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(C语言程序设计-PPT-单元八使用指针访问数据.pptx)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

C语言程序设计-PPT-单元八使用指针访问数据.pptx

1、C语言程序设计 单元八【问题1】【问题2】一维数组是占用连续存储空间的数据,如何通过指针变量对这段内存空间进行操作?有一个整型变量a,如何知道该变量的存储地址?如何通过指针变量对a进行操作?2用指针操作一维数组3用指针操作二维数组4用字符指针操作字符串1地址与指针 地址与指针5返回地址的函数1地址与指针内存地址编号就是内存地址变量m变量a占1字节占4字节2000 2001 2002 2003 2004 2011#include stdio.hvoid main()char m;int a;scanf(“%c”,&m);scanf(“%d”,&a);内存是以字节为单位的连续的存储空间。b1输入:

2、b输入:11地址与指针变量的存储地址2000 2001 2002 2003 2004 2011 b1 变量存储空间的第一个字节对应的内存地址可看作是存储地址。变量m变量a存储地址 根据存储地址就可找到相应的存储单元,所以通常也把地址称为指针。“路标上的地址”可用指针表示。1地址与指针指针变量 C 语言允许用一种类型的变量来存放指针。指针变量 指针变量的值就是某个内存单元的存储地址。设指针变量pm、pa分别存放变量m、a的存储地址。pa=&a pa的存储地址为2001 2000 2001 2002 2003 2004 2011 b1变量m变量a存储地址pm=&m pm的存储地址为2000 1地址

3、与指针指针变量的定义a*a普通变量指针变量int a;普通变量 a的定义int a;指针变量 a的定义*类型标识符 *指针变量名;【形式】“指针变量名”前的“*”表示该变量是指针变量,不能省略。“类型标识符”表示该指针变量所指向的变量的数据类型。一个指针变量只能指向同一类型的变量。【说明】1地址与指针指针变量的定义示例int *p;/定义int型指针变量,变量名为pfloat *pf;/定义float型指针变量,变量名为pfchar *pc;/定义char型指针变量,变量名为pcint*p;int n;p=&n;等价于int*p=&n;&npnnp指针表示简化的指针表示1地址与指针指针变量的定

4、义示例char str20;/定义char型变量名为str的一维字符数组gets(ps);/为ps所指向的内存空间输入字符串char*ps;ps=str;等价于char*ps=str;等价于gets(str);【注意】指针变量也可以被初始化为NULL,它的值为0。当指针值为零时,指针不指向任何有效数据,也称为空指针。1地址与指针指针变量的基本使用int n=10;int*p=&n;如何引用指针变量p输出n的值?printf(%d,*p);等价于printf(%d,n);*指针变量名“*”为指针运算符,表示指针变量所指向内存单元的内容。引用时的“*”不同于指针变量定义语句中的“*”。int*p;

5、“*”是指针标志符printf(%d,*p);“*”是指针运算符【格式】【说明】1地址与指针指针变量的基本使用示例通过指针变量访问的方式计算两个整数之和。#include stdio.hvoid main()int a,b,s;int*pa,*pb;pa=&a;pb=&b;scanf(%d%d,pa,pb);s=*pa+*pb;printf(s=%dn,s);/定义两个整型指针变量pa、pb/使pa指向a/使pb指向b/为pa,pb所指向的内存单元输入值(10、20)/通过指针变量访问的方式求和(30)/输出求和结果/定义整型变量a、b代表两个加数,整型变量s存求和结果&apaa&bpbbs1

6、02030输入:10 20301地址与指针指针变量的基本使用示例利用自定义函数add()计算两个整数之和。#include stdio.hint add(int*pa,int*pb)int sum;sum=*pa+*pb;return sum;void main()int a,b,s;scanf(%d%d,&a,&b);s=add(&a,&b);printf(s=%dn,s);/输入a、b的值(10、20)/求和结果通过return语句返回主函数/add()是自定义函数,形参pa、pb是指针变量/调用add函数,将&apa、&bpb/形参pa a,形参pb b,实现两个整数求和/输出求和结果&

7、apaa&bpbbs102030&a&bsum30输入:10 20301地址与指针指针变量的基本使用随堂练习#include void add(int*pa,int*pb,int*psum)*psum=*pa+*pb;void main()int a,b,s;scanf(%d%d,&a,&b);add(&a,&b,&s);printf(s=%dn,s);试分析如下程序,看看是否能实现“利用自定义函数计算两个整数的和”?1地址与指针3用指针操作二维数组4用字符指针操作字符串5返回地址的函数2用指针操作一维数组 用指针操作一维数组2用指针操作一维数组p=a;int a5;int*p;/建立数组a与

8、指针p之间的关系等价于 p=&a0;如何建立数组a与指针p之间的关系?p p+1 a+1p+2 a+2p+3 a+3p+4 a+4a1a0a2a3a4 a数组 a内存单元2用指针操作一维数组p a+1a1a0a2a3a4 a数组 a内存单元若有如下定义:int a5,*p;p=a;a+1是a1的地址,a+i就是ai的地址。a+i关于地址:a+i&(ai)p+i*(p+i)关于元素:ai*(a+i)等价关系如下:2用指针操作一维数组示例利用两种方法,输出一维数组各元素地址。#include stdio.hvoid main()int a5,*p,i;p=a;printf(获取数组元素地址:n);

9、for(i=0;i5;i+)printf(&a%d=%pn,i,&ai);printf(利用指针表示数组元素地址:n);for(i=0;i5;i+)printf(p+%d=%pn,i,p+i);获取数组元素地址:利用指针表示数组元素地址:&a0=0018FF34&a3=0018FF40&a4=0018FF44&a1=0018FF38&a2=0018FF3Cp+0=0018FF34p+1=0018FF38p+2=0018FF3Cp+3=0018FF40p+4=0018FF442用指针操作一维数组示例输出一维数组各元素的值。#include stdio.hvoid main()int a5=10,

10、31,52,3,68,*p,i;p=a;printf(输出数组元素的值(下标法):n);for(i=0;i5;i+)printf(a%d=%dn,i,ai);printf(输出数组元素的值(下标法):n);for(i=0;i5;i+)printf(p%d=%dn,i,pi);printf(输出数组元素的值(指针法):n);for(i=0;i5;i+)printf(*(p+%d)=%dn,i,*(p+i);输出数组元素的值(下标法):输出数组元素的值(下标法):a0=10a3=3a4=68a1=31a2=52*(p+4)=68p0=10p3=3p4=68p1=31p2=52输出数组元素的值(下标

11、法):*(p+1)=31*(p+0)=10*(p+2)=52*(p+3)=32用指针操作一维数组数组名作函数参数 利用函数处理批量数据时,若实参是数组,形参可是数组也可是指针,实参、形参之间传递的是地址。#include stdio.hint sum(int p,int n)int i,t=0;for(i=0;in;i+)t+=pi;return t;void main()int a5=0,1,2,3,4,s;s=sum(a,5);printf(数组元素之和为:%d.n,s);形参 (p n )实参 (a 5 )数组元素之和为:10.用函数计算整型数组各元素之和。2用指针操作一维数组数组名作函

12、数参数#include stdio.hint sum(int*p,int n)int i,t=0;for(i=0;in;i+)t+=*(p+i);return t;void main()int a5=0,1,2,3,4,s;s=sum(a,5);printf(数组元素之和为:%d.n,s);数组元素之和为:10.指针表示地址,它可作函数的参数。参数传递后指针指向数组的首地址。01234p aa1a0a2a3a4参数传递过程:用指针作形参,计算整型数组各元素之和。2用指针操作一维数组数组名作函数参数 数组名作实参,对应的形参可是数组也可是指针,形参、实参的数据类型应一致。#include std

13、io.hint sum(int p,int n)void main()int a5=0,1,2,3,4,s;s=sum(a,5);#include stdio.hint sum(int*p,int n)void main()int a5=0,1,2,3,4,s;s=sum(a,5);形参是数组形参是指针数组名作实参数组名作实参【说明】2用指针操作一维数组数组名作函数参数 进行函数调用时,将数组的首地址传给形参,形参的改变对实参产生影响。实参与形参共同占用一段内存,在函数执行过程中形参元素值发生变化,实参元素值也会随之改变。#include stdio.hint sum(int*p,int n)

14、*(p+2)=10;void main()int a5=0,1,2,3,4,s;s=sum(a,5);printf(数组元素之和为:%d.n,s);printf(“a2=%dn”,a2);a0a1a2a3a4p a相当于:p=a;24310for(i=0;in;i+)t+=*(p+i);return t;10数组元素之和为:18.a2=10数组元素求和并返回【说明】1地址与指针2用指针操作一维数组4用字符指针操作字符串5返回地址的函数3用指针操作二维数组 用指针操作二维数组3用指针操作二维数组二维数组中所蕴含的地址关系int a43=0,1,2,3,4,5,6,7,8,9,10,11;a0a1

15、a2a3 a数组a由4个元素组成:a0、a1、a2、a3a0包含有 3 个元素:a00、a01、a02,a0a00 a01 a02a10 a11 a12a20 a21 a22a1a2210543876a30 a31 a32a3910113用指针操作二维数组二维数组中所蕴含的地址关系 a a+1 a+2a代表二维数组的首地址,也是二维数组第0行的首地址。a+1代表第1行的首地址,。由于第0行有3个整型元素,所以第1行的首地址为1012,。1000 1012 1024设此二维数组的首地址为1000。int a43=0,1,2,3,4,5,6,7,8,9,10,11;a00 a01 a02a10 a

16、11 a12a20 a21 a22210543876a30 a31 a3291011 a+3 10361个整型变量占4个字节3用指针操作二维数组二维数组中所蕴含的地址关系得出 a0 a1 a2 a0、a1、a2、a3分别代表二维数组各行的首地址 a0代表第0行中第0列元素的地址&a00;a0+1即代表第0行第1列元素的地址&a01;ai+j即代表第i行第j列元素的地址,即&aijint a43=0,1,2,3,4,5,6,7,8,9,10,11;a00 a01 a02a10 a11 a12a20 a21 a22210543876a30 a31 a3291011 a3【说明】3用指针操作二维数组

17、二维数组中所蕴含的地址关系二维数组元素aij可表示成 可用指针形式表示各元素的地址。a0等价于*(a+0),a1等价于*(a+1)。得出ai+j等价于*(a+i)+j,即代表第i行第j列元素的地址a00 a01 a02a10 a11 a12a20 a21 a22210543876a30 a31 a3291011int a43=0,1,2,3,4,5,6,7,8,9,10,11;a0 a1 a2 a3*(ai+j)、*(*(a+i)+j)、(*(a+i)j【说明】3用指针操作二维数组二维数组中所蕴含的地址关系&aij ai+j *(a+i)+j二维数组元素aij的地址表示方式有:a0a1a2a3

18、a00 a01 a02a10 a11 a12a20 a21 a22a30 a31 a32 aint a43;aij *(ai+j)*(*(a+i)+j)(*(a+i)j二维数组元素aij的表示方式有:3用指针操作二维数组建立指针与二维数组的关系 数组中的每个元素都是指针变量,根据数组的定义,指针数组中每个元素都为指向同一数据类型的指针。指针数组,就是用指向同一数据类型的指针来构成一个数组。int *p3,i;/定义指针数组p,包含3个指针变量p0,p1,p2int a34=12,3,5,61,60,54,13,8,71,9,19,24;for(i=0;i3;i+)pi=ai;建立指针数组与二维

19、数组之间的关系【示例】3用指针操作二维数组建立指针与二维数组的关系12356160541387191924a0a1a2 a00 a01 a02 a03a10 a11 a12 a13 a20 a21 a22 a23p0 p1 p2pint *p3,i;int a34=12,3,5,61,60,54,13,8,71,9,19,24;for(i=0;i3;i+)pi=ai;3用指针操作二维数组建立指针与二维数组的关系int *p3,i;int a34=12,3,5,61,60,54,13,8,71,9,19,24;for(i=0;i*y)return x;else return y;void mai

20、n()int*p,i,j;printf(请输入两个整数:);scanf(%d%d,&i,&j);p=f(&i,&j);printf(第一个数为%d,存储地址为:%p.n,i,&i);printf(第二个数为%d,存储地址为:%p.n,j,&j);printf(较大的数为%d,存储地址为:%p.n,*p,p);/函数返回值是指针类型/返回变量x的地址/接收返回值的变量p是指针类型请输入两个整 数:50 10第一个数为50,存储地址为:0018FF40第一个数为10,存储地址为:0018FF3C较大的数为50,存储地址为:0018FF405返回地址的函数【正确使用返回值为地址(指针)的函数,需做到

21、三点】主调函数中返回值的接收者也为指针类型。函数定义时,在函数名前加“*”指明函数返回值为地址值。函数返回值语句return中指明返回的是地址值。int*f(int*x,int*y)if(*x*y)return x;else return y;void main()int*p,i,j;p=fun(&i,&j);5返回地址的函数随堂练习下面函数的功能是:获取第n个数组元素的地址。getadd(int*p,int n)return();intp+n-1*/指针p指向数组首地址p 表示第1个元素的地址p+1 表示第2个元素的地址p+2 表示第3个元素的地址p+n-1 表示第n个元素的地址1地址与指针

22、2用指针操作一维数组3用指针操作二维数组4用字符指针操作字符串5返回地址的函数p 指针与地址p 用指针操作一维数组p 用指针操作二维数组u内存地址可看作存储地址u地址可用指针表示uint a5,*p;数组名a是常量,指针p是变量u通过语句p=a;建立指针p与数组a之间的关系u数组名作函数实参,传递的是数组的首地址uint a43;数组名a代表数组的首地址u各行首地址可表示为ai或a+iu各元素地址可表示为&aij或ai+j或*(a+i)+jp 用字符指针操作字符串p 返回地址的函数u字符指针可操作字符串u操作不确定字符串长度时使用字符指针更方便u函数定义为指针型即可返回地址 u接收“返回地址的函数值”的变量应设为指针型

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|