欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    《c语言程序设计教学资料》第11章-指针与数组.ppt

    • 资源ID:5896104       资源大小:3.10MB        全文页数:43页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《c语言程序设计教学资料》第11章-指针与数组.ppt

    第11章 数组与指针,数组与指针,指针和一维数组指针和二维数组动态内存分配函数,数组与指针,一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。数组元素的指针就是数组元素的地址。,可以用一个指针变量指向一个数组元素 int a10=1,3,5,7,9,11,13,15,17,19;int*p;p=,等价于p=a;,等价于int*p=a;或int*p=,注意:数组名a不代表整个数组,只代表数组首元素的地址。p=a;的作用是“把a数组的首元素的地址赋给指针变量p”,而不是“把数组a各元素的值赋给p”。,指针与一维数组,在引用数组元素时指针的运算,在指针指向数组元素时,允许以下运算:加一个整数(用+或+=),如p+1 减一个整数(用-或-=),如p-1 自加运算,如p+,+p 自减运算,如p-,-p 两个指针相减,如p1-p2(只有p1和p2都指向同一数组中的元素时才有意义),如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素。例:float a10,*p=a;假设a0的地址为2000,则:p的值为2000 p+1的值为2004 p-1的值为1996,越界,如果的初值为&a0,则p+i和a+i就是数组元素ai的地址,或者说,它们指向a数组序号为i的元素*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即ai。,p,p+1,a+1,p+i,a+i,p+9,a+9,*(p+i),通过指针引用数组元素,引用一个数组元素,可以用:()下标法,如ai形式;()指针法,如*(a+i)或*(p+i);其中a是数组名,p是指向数组元素的指针变量,其初值p=a。,例:输出数组中的全部元素。,假设int a5,要输出各元素的值有四种方法:,(1)下标法。,(2)通过数组名计算数组元素地址,找出元素的值。,(3)用指针变量指向数组元素。,虽然p和a的值都是数组的首地址,但是数组名a不能执行增1或减1操作。因为数组名是指针常量,代表一个地址常量,其值不能改变;指针是变量,其值可以改变。,3种方法的比较:第(1)和第(2)种方法执行效率相同编译系统是将ai转换为*(a+i)处理的,即先计算元素地址。因此用第(1)和第(2)种方法找数组元素费时较多。第(3)种方法比第(1)、第(2)种方法快用指针变量直接指向元素,不必每次都重新计算地址,像p+这样的自加操作是比较快的这种有规律地改变地址值(p+)能大大提高执行效率 用下标法比较直观,能直接知道是第几个元素。用地址法或指针变量的方法不直观,难以很快地判断出当前处理的是哪一个元素。,(4)指针的下标法,数组名和指针变量作函数参数,指针与二维数组,二维数组可以看作一维数组,其每个数组元素又是一个一维数组,a0可以看做3个短整型元素组成的一维数组的数组名,如果将二维数组名a看成一个行地址(第0行),则a+i表示二维数组第i行的地址,ai可看成一个列地址,即第i行第0列的地址。行地址a加1(a+1),表示指向下一行;列地址ai加1(ai+1),表示指向下一列,二维数组的行指针与列指针,注:mn个元素的二维数组,int a34=1,3,5,7,9,11,13,15,17,19,21,23;,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,a代表第0行首地址a+1代表第1行首地址a+2代表第2行首地址,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,行指针每加1,走一行,a+i代表行号为i的行首地址(按行变化)*(a+i)代表什么?,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,相当于ai,a0代表a00的地址a0+1代表a01的地址a0+2代表a02的地址a0+3代表a03的地址,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,列指针每加1,走一列,a1代表谁的地址?a1+1代表谁的地址?a1+2代表谁的地址?a1+3代表谁的地址?,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,ai+j代表谁的地址?,a,a+1,a+2,a0,a0+1,a0+2,a0+3,行指针,列指针,代表aij的地址,*(ai+j)代表什么?,代表元素aij,*(*(a+i)+j)代表什么?,与*(ai+j)等价,动态数组,动态存储区,只读存储区,低地址区,高地址区,非静态的局部变量是分配在内存中的动态存储区的,这个存储区是一个称为栈的区域 C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据需要时随时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由存储区,称为堆区,对内存的动态分配是通过系统提供的库函数来实现的,主要有malloc,calloc,free,realloc这4个函数。使用这些函数,要在程序开头将头文件包含到源程序中。即在用到这些函数时应当用#include 指令把stdlib.h头文件包含到程序文件中。,函数原型为:void*malloc(unsigned int size);作用:是在内存的动态存储区中分配一个长度为size的连续空间,(1)malloc函数,例:malloc(100);开辟100字节的临时分配域,注意:指针的基类型为void,即不指向任何类型的数据,只提供一个地址,如果此函数未能成功地执行(例如内存空间不足),则返回空指针(NULL),例:int*p=NULL;p=(int*)malloc(2)若不清楚相应数据类型所占字节数,则 p=(int*)malloc(sizeof(int),函数原型为:void*calloc(unsigned n,unsigned size);作用:是在内存的动态存储区中分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组。用calloc函数可以为一维数组开辟动态存储空间,n为数组元素个数,每个元素长度为size。这就是动态数组。函数返回指向所分配域的起始位置的指针;如果分配不成功,返回NULL。,(2)calloc函数,例:p=calloc(50,4);开辟504个字节的临时分配域,把起始地址赋给指针变量p,函数原型为:void*free(void*p);作用:是释放指针变量所指向的动态空间,使这部分空间能重新被其他变量使用。p应是最近一次调用calloc或malloc函数时得到的函数返回值。,(3)free函数,函数原型为:void*realloc(void*p,unsigned int size);如果已经通过malloc函数或calloc函数获得了动态空间,想改变其大小,可以用recalloc函数重新分配。用realloc函数将p所指向的动态空间的大小改变为size。p的值不变。如果重分配不成功,返回NULL。,(4)realloc函数,例:realloc(p,50);将p所指向的已分配的动态空间改为50字节,

    注意事项

    本文(《c语言程序设计教学资料》第11章-指针与数组.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开