欢迎来到163文库! | 帮助中心 精品课件PPT、教案、教学设计、试题试卷、教学素材分享与下载!
163文库
全部分类
  • 办公、行业>
  • 幼教>
  • 小学>
  • 初中>
  • 高中>
  • 中职>
  • 大学>
  • 各类题库>
  • ImageVerifierCode 换一换
    首页 163文库 > 资源分类 > PPT文档下载
    分享到微信 分享到微博 分享到QQ空间

    C语言程序设计课件:第5章 指针2.ppt

    • 文档编号:2045942       资源大小:1.67MB        全文页数:36页
    • 资源格式: PPT        下载积分:9.5文币     交易提醒:下载本文档,9.5文币将自动转入上传用户(罗嗣辉)的账号。
    微信登录下载
    快捷注册下载 游客一键下载
    账号登录下载
    二维码
    微信扫一扫登录
    下载资源需要9.5文币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    优惠套餐(点此详情)
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、试题类文档,标题没说有答案的,则无答案。带答案试题资料的主观题可能无答案。PPT文档的音视频可能无法播放。请谨慎下单,否则不予退换。
    3、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者搜狗浏览器、谷歌浏览器下载即可。。

    C语言程序设计课件:第5章 指针2.ppt

    1、5.2 指针与数组的关系指针与数组的关系在在C C语言中,指针与数组有着十分密切的关系。语言中,指针与数组有着十分密切的关系。访问数组元素有两种方法:即访问数组元素有两种方法:即下标法下标法和和指针法指针法。 指向数组的指针指向数组的指针指向数组的指向数组的起始地址起始地址,指向数指向数组元素的指针组元素的指针是数组是数组元素的地址元素的地址。60006001600260036004600560066007a0a1a2a3aa+1a+260006001600260036004600560066007a0a1a2a3app+p+ 数组元素表示方法数组元素表示方法a0a1a2a3a9.aa+9a+

    2、1a+2地址地址元素元素下标法下标法a0a1a2a9a0a1a2a3a9.pp+9p+1p+2地址地址元素元素指针法指针法*p*(p+1)*(p+2)*(p+9)ai *(a+i)ai pi *(p+i) *(a+i)*a*(a+1)*(a+2)*(a+9)p0p1p2p9.12341. p+1与与p+的异同:的异同:p+1与与p+都指向当前指针所指单元的下一个元素都指向当前指针所指单元的下一个元素p+1并不改变当前指针的指向,即并不改变当前指针的指向,即p的值并未改变,的值并未改变, 而而p+相当于相当于p=p+1,即使指针即使指针p向下移动一个元素向下移动一个元素位置位置2. 在对指针进行

    3、加、减运算中,数字在对指针进行加、减运算中,数字1 1不再代表十进不再代表十进制中的整数制中的整数1 1,即,即 p+1p+1p +1*sizeof(基类型)基类型)pp+12的高位字节的高位字节2的低位字节的低位字节2的高位字节的高位字节2的低位字节的低位字节10001002100410061008a0a1a2a3a4pshort a5= 2,4, 23,6,78 ;short *p;p=a;若是若是 :p+1若是若是 :p基类型是基类型是 short , p+1相相当于加上当于加上2个字节个字节例例 int a =1,2,3,4,5,6,7,8,9,10, *p=a, i; 数组元素数组元

    4、素地址的正确表示:地址的正确表示:(A)&(a+1) (B)a+ (C)&p (D)&pi数组名是数组名是地址常量地址常量p+,p- ( )a+,a- ( )a+1, *(a+2) ( )不能对表达式不能对表达式求地址求地址求的是指针求的是指针p的地址的地址#include main() int i,*p,a7; p=a; for(i=0;i7;i+) scanf(%d,p+); printf(n); for(i=0;i7;i+,p+) printf(%dt,*p);例例 注意指针的当前值注意指针的当前值p=a;pp5876273 0 1 2 3 4 5 6apppppp指针变量可以指到指针变

    5、量可以指到数组后数组后的内存单元的内存单元 am-10 am-11 am-1n-1 a00 a01 . a0n-1 a10 a11 . a1n-1 .amn= am-1n-1 . am-11 am-10 . a1n-1 . a11 a10 a0n-1 . a01 a00a0a1am-1a00a01a02a10a11a12a0+1a0+2&a11a1+1&a12&a01&a02 a00 a0a01a02a10 a1 a11a12 a a1+2 a23;a00a01a02a10a11a12 a00 a0a01a02a10 a1 a11a12 a a23;a 代表代表二二维数组的首地址,维数组的首地

    6、址,第第0 0行行的地址的地址a + i 代表代表第第i i行行的地址的地址a00a01a02a10a11a12 a00 a0a01a02a10 a1 a11a12 a a23;*(a + i) 即即 ai 代表代表第第i行行的地址的地址*(a+i) + j 即即 ai + j代表代表第第i行行的地址的地址&aij &a12a1+2a00a01a02a10a11a12 a00 a0a01a02a10 a1 a11a12 a a23;&a12a1+2( *(a+i) + j ) 即即 aij 代表代表第第i行第行第j列列的的*(a + i) 即即 ai 代表代表第第i行行的地址的地址,*(a+i

    7、) + j 即即 ai + j代表代表第第i行行的地址的地址&aij short a34=1,2,3,4,5,6,7,8,9,10,11,12; int *p = &a00;a1a0a21234567891011 12行地址行地址a+2a+1a第第i行的地址为:行的地址为:a+i、*(a+i) 、ai、&ai 或或&ai0任一元素任一元素aij的地址为:的地址为:&aij、ai+j 、 *(a+i)+j 或或 p+i*4+j元素元素aij也可表示为:也可表示为: aij 、 *(ai+j) 、 *(*(a+i)+j) 或或*(p+i*4+j)*(a+i)a+iai&ai当一个指针变量所指向的元

    8、素为数组时,这种类型当一个指针变量所指向的元素为数组时,这种类型的指针称为的指针称为指向数组的指针指向数组的指针,其定义格式为:,其定义格式为: (* )数组的大小数组的大小; 如:如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; int (* p)4; (* p)指明指明p是一个指针变量,再与是一个指针变量,再与4结合,表示该结合,表示该指针变量指向一个有四个元素的一维数组。指针变量指向一个有四个元素的一维数组。p= &a0; p=a0;p指向的行的元素可以表示为指向的行的元素可以表示为(*p)0, (*p)3p= a,二维数组二维数组a中任一元素可表示为中任一元

    9、素可表示为pij( )( )不能少不能少int (*p)4与与int *p4不同不同p的值是一维数组的的值是一维数组的首地址,首地址,p p是是行指针行指针int a34;a00a01a10a11a20a21a02a03a12a13a22a23aa+1a+2pp+1p+2p0+1或 *p+1p1+2或 *(p+1)+2*(*p+1)或 (*p)1 *(*(p+1)+2)一维数组指针变量维数和一维数组指针变量维数和二维数组二维数组列数列数必须相同必须相同第第i 行、第行、第j 列元素列元素aij 的表示方法的表示方法是:是:*(*(p+i)+j)(*p)0(*p)1(*p)2(*p)3P#inc

    10、lude main() int a34=1,3,5,7,9,11,13,15,17,19,21,23; int i, j, (*p)4; for(p=a, i=0;i3;i+,p+) for(j=0;j4;j+) printf(%4d ,*(*p+j); printf(n); 例例 一维数组指针变量举例:一维数组指针变量举例: 输出二维数组每行每列元素的值输出二维数组每行每列元素的值int a34;a00a01a10a11a20a21a02a03a12a13a22a23ppp p0j p1j p2j运行结果:1 3 5 7 9 11 13 15 17 19 21 23 5.3 指针数组指针数组

    11、指针数组中每个元素都是一个指针,且这指针数组中每个元素都是一个指针,且这些指针指向相同数据类型的变量些指针指向相同数据类型的变量定义格式:定义格式: 类型说明符类型说明符 *数组名数组名常量常量N 如如 : char *p5;如果一个数组中的每个元素都是同类型的指针,则该数组称如果一个数组中的每个元素都是同类型的指针,则该数组称为指针数组。格式如下:为指针数组。格式如下: * ; 如如: int *p14; float *p216; 对指针数组初始化时其每个元素的值都为地址。对指针数组初始化时其每个元素的值都为地址。当定义了一个指针变量时,如:当定义了一个指针变量时,如: char c, *p

    12、=&c; 系统会为指针变量系统会为指针变量p分配内存单元。我们可以定义分配内存单元。我们可以定义另一个指针,使得该指针指向另一个指针,使得该指针指向p的内存单元,如:的内存单元,如: char *pp=&p; pp称为指向指针称为指向指针p的指针,又称为二级指针。的指针,又称为二级指针。 定义二级指针的一般格式为:定义二级指针的一般格式为: *; pppcp2p1i# include void main(void)int i=10;int *p1,*p2;p1=&i;p2=&p1;printf(i= %d %d %d n, i, *p1, *p2);printf(p1= %x %x %x n,

    13、 &i, p1, *p2);printf(p2= %x %x n, &p1, p2);系统找到一块未占用的内存,将其标记为已占系统找到一块未占用的内存,将其标记为已占用,然后把地址返回,并标记此程序占用此块用,然后把地址返回,并标记此程序占用此块内存,其它程序不能再用它内存,其它程序不能再用它向系统申请大小为向系统申请大小为的内存块的内存块把首地址返回把首地址返回如果申请不成功,返回如果申请不成功,返回int *pp = (int *) malloc(n * sizeof (int);if (p = NULL) printf(No enough memory!n); exit(0); 释放由释

    14、放由malloc()申请的内存块申请的内存块p是指向此块内存的指针是指向此块内存的指针free时系统标记此块内存为未占用,可被重新分配时系统标记此块内存为未占用,可被重新分配int *pp = (int *) malloc(n * sizeof (int);for (i=0;in;i+)pi = i;free(p);确保指针使用前是非空指针确保指针使用前是非空指针释放向系统申请的存储空间释放向系统申请的存储空间int *pp = (int *) malloc(n * sizeof (int);for (i=0;in;i+)pi = i;free(p);定义定义含义int i;int *p;int aN;int *pN;int (*p)N;int f();int *p();int (*p)();int *p;定义整型变量定义整型变量ip为指向整型数据的指针变量为指向整型数据的指针变量定义含定义含N个元素的整型数组个元素的整型数组aN个指向整型数据的指针变量组成的个指向整型数据的指针变量组成的指针数组指针数组pp为指向含为指向含N个元素的个元素的一维整型数组的指针一维整型数组的指针变量变量f为返回整型数的函数p为返回指针的函数,该指针指向一个整型数据p为指向函数的指针变量,该函数返回整型数p为指针变量,它指向一个指向整型数据的指针变量


    注意事项

    本文(C语言程序设计课件:第5章 指针2.ppt)为本站会员(罗嗣辉)主动上传,其收益全归该用户,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!




    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


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

    163文库