全国计算机等级考试培训教材(二级C)课件 ch09 指针_第1页
全国计算机等级考试培训教材(二级C)课件 ch09 指针_第2页
全国计算机等级考试培训教材(二级C)课件 ch09 指针_第3页
全国计算机等级考试培训教材(二级C)课件 ch09 指针_第4页
全国计算机等级考试培训教材(二级C)课件 ch09 指针_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机等级考试第九章指针高等院校公共课系列精品教材地址与指针01ONE9.1地址与指针考点1指针的概念与指针变量指针就是地址。地址是什么?如果程序中定义了一个变量,当编译时,系统就会给变量分配内存单元。不同的数据类型,分配的单元长度不同。(2)指针变量是用来存储地址的变量,而一般变量是用来存储数值的。指针变量存放的是变量的首地址。(3)变量的访问:定义了指针变量,就有两种访问变量的方式。①直接访问:变量中直接存储数据。②间接访问:指针变量中存放的是变量的地址,通过地址再取出变量的值,这种为间接寻址。指针变量02TWO9.2指针变量考点2

指针变量的定义指针变量的定义格式如下:类型*标识符例如:int*i_pointer,含义:指针变量为i_pinter,指向的变量为整型变量,即只可以把整型变量的地址赋值给指针变量。说明:(1)定义时“*”是指针标量的标识符,不可省略。“*”是标识符,不是变量的组成部分,即変量是i_pointer。(2)相同类型的指针变量可以在一个说明语句中定义,但每个变量前都需要有指针标识符“*”。9.2指针变量考点3指针运算符指针运算符主要包括取地址符“&”和取内容符“*”。(1)“&”是取地址符号。它的一般格式:&变量名。(2)“*”是取值运算符。他的一般格式:*指针变量名。说明:(1)“*”在算数表达式中是乘号,在指针变量定义时是指针标识符,在指针运算符中是取值运算符。(2)变量定义时,变量以外的信息表示变量的性质。运算时,要用变量本身去操作。9.2指针变量考点4

指针变量的初始化指针使用的原则是“先定义,后初始化,再运算”,指针变量在使用前必须初始化,把一个具体的地址赋给它,否则引用时会出错,如果不指向任何数据就赋空值“NULL”。指针变量两种初始化方法如下。(1)定义的同时初始化:inta=2,*p=&a;(2)先定义后初始化inta=2,*p;p=&a;说明:p是指针,只能存放地址,p=100是错误的,*p=100是正确的。因为*p取的是里面的值,即i的值,等价于i=100。9.2指针变量考点5指针的运算1.赋值运算赋值运算的3种情况如下。第1种:通过&将变量的值赋值给指针变量。第2种:将已有指针变量给指针变量赋值或者变量首地址(数组、字符串等),要求基类型相同。第3种:空指针NULL,系统设置好的标识,指向0。2.指针与整数加减运算对于数组,通过指针加1,可以实现指针移动到下一个元素。3.指针间减法运算对于指向相同数组的两个指针相减,可以求出隔几个元素。4.*p++和(*p)++的差别*p++是地址变化,按从右向左结合,*(p++),先求出*p所指变量的内容,指针p再向后移动。(*p)++,先求出*p单元的内容,然后将变量内容进行自加运算。指针与数组03THREE9.3指针与数组考点6

指针与一维数组数组名代表数组的首地址。一维数组中,第一个元泰的地址即为该数组的起始地址。建立指针变量与一维数组的联系,一般就是将指针指向数组的首地址。例如:intal6],*pa;pa=a;或pa=&a[0];说明:①数组名a代表该数组的首地址,即a[0]的地址。②pa=a;或pa=&a10];使pa保存了数组a的首地址,pa,a,&a[0]都指向一个地址。③以上操作可等价于inta[6],*pa=a。④如果pa=&a[3];,则表示*pa的值就是a[3]的地址。注意:数组a是一个地址常量,它永远指向数组的首地址,不能重新赋值。因此,a=&i;或a++都是错误的。9.3指针与数组考点7用指针访问数组元素(1)通过指针引用数组元素,例如:int*p,a[5];p=&a[0];说明:①指针变量p指向了数组元素a[0],可以使用访问运算符“*”来引用变量a[0],如*p=18;等价于a[0]=18;。②*(p+1)表示a[1],p+1表示&a[1]。(2)通过数组的首地址引用数组元素,例如:Inta[5];说明:①a是数组名,表示收地址,可以把a当成一个指针常量。②*a等价于a[0],*(a+1)等价于a[1];a等价于&a[0],a+1等价于&a[1];。(3)用带下标的指针变量引用一维数组元素,例如:int*p,a[5];p=a;说明:①p[0]表示p指针指向的内存单元,p[1]表示p指向的内存单元。②a[i]的等价引用方法:a[i]、p[i]、*(a+i)、*(p+i)。③a[i]的地址等价引用方法:&a[i]、&p[i]、a+i、p+i.9.3指针与数组考点8

指针与二维数组任何一个二维数组均由若干个一维数组组成,a[0]、a[1]和a[2]是一维数组名,数组名代表数组的首地址,因此a[0]就代表数组元素a[0][0]的地址,即&a[0][0]。注意:a的值与a[0]相同,但它们的基类型不同,a可以等价于一个二维指针,而a[0]是一维指针。因此,inta[3][4],*p=a;错误。(1)取数组元素a[i][j]的地址的几种方法:&a[i][j];、a[i]+j;、*(a+i)+j;。取数组元素a[i][j]的值的几种方法:a[i][j];、*(a[i]+j);、*(*(a+i)+j);。(2)指针数组的定义方式:*指针数组名[常量表达式];例如:int*p[3];(3)行指针的一般定义形式:类型名(*指针数组名)[常量表达式];例如:int(*p)[2];9.3指针与数组考点8

指针与二维数组指针数组与行指针的区别(1)int*p[3];定义的是指针数组,表示一个数组,含有3个元素p[0]、p[1]、p[2],且这3个元素只能存放整形元素的地址。(2)int(*p)[3];定义的是行指针,表示一个指针变量,它仅有一个存储空间,只能存放一个长度为3的一维数组指针。指针与字符串04FOUR9.4指针与字符串考点9

指针与字符串可以通过字符指针来处理字符串,例如:char*p=“China”或者char*p;p="China";把字符串赋值给指针p,实质是把保存字符串"China”的那段内存的首地址赋值给指针p,使得指针p指向了字符串,这样就可以通过指针来操作字符串了。【注意】charstr[10];str="China'':是错误的!数组名是地址常量,不能进行赋值操作!提示:“三名主义”,三名均为首地址。数组名:表示第一个元素的地址。函数名:表示该函数的入口地址。字符串常量名:表示第一个字符的地址。指针与函数05FIVE9.5指针与函数考点10指针变量作为函数参数考点11

一维数组名作为函数参数函数的参数传递有“值传递”和“地址传递”两种。利用指针作为参数可以实现“地址传递”。通过地址传递实现形参指针变量与实参指向相同的存储单元,这样改变形参指针变量就可以通过操作改变实参的值。如果调用函数实参是一维数组,形参可以用相同类型的数组或者基类型相同的指针。参数传递属于地址传递,即调用函数对形参的操作将影响实参的数值。9.5指针与函数考点12

二维数组名作为函数参数考点13字符指针作为函数参数二维数组名也是一个地址值,所以当二维数组名作为函数实参时,它所应对的形参应该是行指针变量。可以是一下3种情况:fun(inta[][N],intb[])fun(inta[N][N],intb[])fun(int(*a)[N],intb[])无论用哪种方式,对数组元素的访问均可以用a[i][j]。9.5指针与函数考点14返回指针值的函数考点13字符指针作为函数参数指针型函数是指返回指针值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论