C语言复习第五章指针.ppt

上传人:tia****nde 文档编号:11495331 上传时间:2020-04-25 格式:PPT 页数:25 大小:2.56MB
返回 下载 相关 举报
C语言复习第五章指针.ppt_第1页
第1页 / 共25页
C语言复习第五章指针.ppt_第2页
第2页 / 共25页
C语言复习第五章指针.ppt_第3页
第3页 / 共25页
点击查看更多>>
资源描述
第五章指针Pointer,5.1指针的概念,指针是C语言的重要特征,是C语言访问内存数据和程序的灵活和有效的手段。,C语言的指针支持:函数的地址调用;动态分配内存;数组的地址引用。,内存、地址、指针(Memory,Address,Pointer),内存存放了计算机正在运行的程序和程序正在使用的数据。内存的基本单元是字节(Byte)。,为了访问内存单元,CPU给每个内存单元一个编号,该编号称为该内存单元的地址。,变量是程序中可以改变的量,当说明变量时,系统将为其在内存中开辟相应得内存单元。由此确定变量的地址及内存中的表示方式。,2000H,2001H,2002H,2003H,inta=0;,a的内存单元,a的地址,标识符命名的指针变量名。,指针标志。,指针指向对象的类型。,int*p,*q;/*p、q是指向整型变量的指针。*/,float*pfValue,*pf;/*pfValue和pf是指向浮点型的指针。*/,指针对变量的引用,定义指针的目的是通过指针引用内存对象,指针的引用应按如下步骤进行:,说明指针,inta=0,*p;,指针指向对象,p=,通过指针引用对象,*p=*p+2;,指针操作的两种运算:,取地址运算,2000H,a,p,p=/*p指向a。*/,2000H,*p=2;,2,举例:,#includevoidmain(void)intx,*p;x=55;p=,2000H,x,p,2000H,55,65,关于指针的说明:,指针必须指向对象后,才能引用。,int*p;*p=2;/*Error!*/,p=则:p1=,a,2000H,b,2400H,p1,p2,2000H,2400H,p1+;/*含义指向a后的整型单元*/,2002H,2002H,p1-;/*指向a前的整型单元*/,p1+n;/*指向a后的第n个整型单元*/,p1-n;/*指向a前的第n个整型单元*/,p2-p1;/*a和b之间差的单元数*/,结果200H,pn相当于:p的实际内容nsizeof(*p);,六种关系运算,比较两个同类型变量之间的地址关系。,p1p2;,指针赋值运算,#includevoidmain(void)inta,b,*p1,*p2;a=2;b=3;p1=,差别,a,指针指向数组,p=a;/*指向数组的首地址*/p=/*指向数组的首地址*/,通过指针引用数组元素,当指针指向数组的首地址时,则下标为i的元素地址为:p+i或a+i,引用数组元素可以有三种方法:,下标法:ai指针法:*(p+i)数组名法:*(a+i),注意:数组名是地址常量,不能改变!,a=p;/*Error!*/,举例:打印数组中的奇数。,#includevoidmain(void)inti,a10;for(i=0;i=A,将无符号的八进制字符串转换为十进制整数。,#includevoidmain(void)char*p,s6;inti,n=0;p=s;gets(p);for(;*p!=0;p+)n=n*8+*p-0;printf(“%dn”,n);,p指向s数组。,输入字符串。,s,p,s,5,5,6,0,n=0*8+5-05,n=5*8+5-045,n=45*8+6-0366,Chap5ex5,思考题:将4位十六进值字符串转化为十进制字符串。,二维数组的地址,如下说明数组inta34=1,2,3,4,5,6,7,8,9,10,11,12;,其二维结构如下:,行,列,为了便于索引,C语言将数组分为两级管理。,a0,a1,a2,将a理解为一维数组,数组有三个元素,它们分别为a0、a1,a2。各个元素又是一个有四个元素的一维数组。,从地址的角度看:a为a0第一行的首地址a+1为a1第二行的首地址a+2为a2第三行的首地址,a+1地址一次加一行。,i行j列数组元素的地址可以由ai+j得到。,数组名地址的两级管理,a,a0,a1,a2,a00a01a02a03,a10a11a12a13,a20a21a22a23,等价地址及其管理方式,数组名是数组的地址,而且是常量,*运算不改变其值!,以下三种地址等价:,a+i,*(a+i),ai,加法按行递增,加法按列递增,(a+1)+1,*(a+1)+1,差别?,数组名表示数组元素,aij,(*(a+i)j,*(*(a+i)+j),*(ai+j),指针与二维数组,int*p,a34;p=a;aij*(p+4*i+j)等价!,a00,a,a01,a02,a0,a10,a11,a12,a1,a20,a21,a22,a2,a+1,a1+2,举例:在数组a中查找输入的数,输出行列位置。,#includevoidmain(void)inta34=1,2,3,4,5,6,7,8,9,10,11,12;inti,j,iS;int*p;p=a;scanf(“%d”,下标法。,*(ai+j),*(*(a+i)+j),*(p+4*i+j),5.3指针数组,指针是存放其它数据对象地址的变量。因此,指针可以构成数组。每个数组元素为一个指针变量,且在内存中连续存放。,指针数组的说明,说明格式:type*数组名constexp;,int*p4;,含义是在内存中开辟空间,并指明元素所指向的对象的类型。,数组名p为数组的地址。,使用前必须让各元素指向对象。,inti,a34,*p3;for(i=0;i3;i+)pi=ai;*(p2+1)=2;/*通过指针数组引用数组元素a21*/,指针数组的应用举例,指针数组与多维数组,通过指针数组按数学方式输出数组的值。,#includevoidmain()inti,j;inta34=1,2,3,4,5,6,7,8,9,10,11,12;int*p3;p0=a0;p1=a1;p2=a2;for(i=0;i3;i+)for(j=0;j4;j+)printf(“%5d”,*(pi+j);printf(“n”);,p0,数组a的二维结构,p1,p2,a0,a1,a2,每输出一行,打印回车。,指针数组与多字符串,通过指针数组构成的菜单,执行DOS命令。,#includevoidmain(void)char*command=“dir”,“time”,“date”,ch;for(;)doprintf(“1:directoryn”);printf(“2:settimen”);printf(“3:setdaten”);printf(“4:quitn”);printf(nselection:”);ch=getchar();printf(“n”);while(ch4);if(ch=4)break;system(commandch-1);,内层循环输入选项,外层循环根据选项执行命令,执行系统命令函数,如:system(“dir”);,3-12,Chap5ex3,5.4指向指针的指针,如果指针变量的内容存放其它指针的地址,称该指针为指向指针的指针。,指向指针的指针的说明:,形式:type*p;,int*p;,p是一个指向整形指针的指针。,#includevoidmain(void)intx,*p,*q;x=10;p=,p为指向整型的指针。,q为指向整型指针的指针。,x,p,q,2000H,3000H,10,2000H,3000H,指向指针的指针的应用,指向指针的指针一般用于多维数组和指针数组的操作。,多维数组,#includevoidmain()inta34=1,2,3,4,5,6,7,8,9,10,11,12,;int*arr3=a0,a1,a2;inti,j,*p;p=arr;for(i=0;i3;i+)for(j=0;i4;j+)printf(“%5d”,*(*(p+i)+j);printf(“n”);,ai,aij,arr,arr,p,p+1,用于处理多字符串,#includevoidmain(void)char*name=“one”,“two”,“three”,“four”;char*p;inti;for(i=0;i4;i+)p=name+i;printf(“%sn”,*p);,p,name+i,5.5指针的类型问题,通过指针可以访问基本类型的变量及数组,指针的类型是其指向数据的类型,该类型决定了指针逻辑加一时所加的物理字节数。,可以强制转换指针的类型,转换方式为:,(type*)p,#includevoidmain()chara3,*p;inty;a0=0 x12;a1=0 x34;a2=0 x56;p=,&a0,p,相邻单元转化为一个整型单元。,chp5ex2,*p,指向void类型的指针,void称为“空类型”,void不能说明变量。但可以用void说明指针。,当用void说明指针时,指针称为指向空类型的指针,空类型指针加1,地址移动一个字节。也就是说void指向的类型是以物理字节为单位的内存。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!