- 1、本文档共93页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
*4.6.1指针运算
前面已经讲过指针的基本概念,指针表示内存变量的地址,存放指针的变量称作指针变量,有时也简称为指针。指针只能用地址表达式表示,不能将任意的整数赋予指针变量,也不能像普通整数那样对指针进行任意的运算。指针的运算主要有以下三种。1.算术运算指针的算术运算:指针加、减一个整数和两个指针相减运算。指针加、减一个整数运算时,两个运算对象是一个指针而另一个为整数类型的量。例如:inta=2;int*p;p=p+a;*表达式p+a的结果也是一个指针(地址值),这时指针指向指针p后面的第a个存储单元的起始地址,但不同数据类型占用存储单元的大小不同,指针移动的距离也不同。如果指针p所指向对象的存储单元包含m个字节(m为任意自然数),则指针移动的距离为a*m,表达式p+a的结果(地址值)应为p+a*m。指针加、减一个整数经常用于对数组的操作。设p是指向数组中某元素的指针变量,则下列表达式合法:p+a??表达式表示从当前位置p向地址变大方向移a个元素所对应的地址,p保持不变;p-a??表达式表示从当前位置p向地址变小方向移a个元素所对应的地址,p保持不变;p++?表达式表示p当前指向的地址,然后p向地址变大方向移1个元素,p变大;++p?表达式表示p当前指向的地址向地址变大方向移1个元素所对应的地址,p变大;p--??表达式表示p当前指向的地址,然后p向地址变小方向移1个元素,p变小;--p??表达式表示p当前指向的地址向地址变小方向移1个元素所对应的地址,p变小。*总之,当指针指向数组中某元素时,指针加、减一个整数,其结果的类型仍然是指向数组的元素的指针类型,结果的值向后(加)或向前(减)移动了整数个元素。如图4.2所示,表达式p+n的结果使得指向数组元素a[i]的指针变量p指向后面相隔n个元素的a[j]。图4.2指针的移动*两个指针相减的运算只对指向同一个数组的指针有意义。例如p1和p2是指向同一数组中不同或相同元素的指针(p1小于或等于p2),则p2-p1的结果为p2和p1之间间隔元素的数目n,注意两个指针相减其结果是一个整数而不是指针。例如,如图4.3所示,指针p1指向数组元素a[2],指针p2指向数组元素a[8];a[2]与a[8]之间相隔6个元素,所以p2-p1的值为6。图4.3指针相减运算*2.关系运算
如果两个指针类型相同,则这两个指针可以进行任何一种关系运算,其中作比较运算的两个指针应指向同一个数组中的元素,否则运算结果无意义。设指针p1、p2指向数组中的第i、j元素,则下列表达式为真的含义为:p1p2(p1p2)表示p1所指元素位于p2所指元素之前(之后);p1=p2(p1=p2)表示p1所指元素位于p2所指元素之前或者同一个元素(表示p1所指元素位于p2所指元素之后或者同一个元素);p1==p2(p1!=p2)表示p1和p2指向同一个元素(表示p1和p2不指向同一个元素)。NULL指针(整常数0)可以与任何类型的指针比较。NULL指针与其他类型的指针之间通常是作==和!=比较,判断指针是否为NULL指针。*4.6.2指向一维数组的指针1.一维数组地址一维数组元素a[i]的地址可以写成表达式a[i]或a+i,a[i]是用下标形式表示的地址,a+i是用指针形式表示的地址,二者结果相同。元素a[i]的地址等于数组首地址向后偏移若干字节,偏移的字节数等于a[i]与首地址之间间隔元素的数目乘以一个元素的所占存储单元字节数。例如:floata[10];由于float类型占4个字节,因此元素a[3]的地址值为a+3*4,即数组a的第3个元素的地址等于数组首地址向后偏移12个字节。*2.一维数组指针的定义一维数组指针与指向其他简单变量的指针定义形式一样。例如:inta[30];int*p;上面定义了一个整型数组a和一个指向整型量的指针变量p。这时指针变量p并没有指向任何对象,只有当将数组a的起始地址赋值给指针变量p时,指针p才表示指向数组a,这时我们称指针p为指向数组a的指针,指向过程可以通过下面两种方法实现:*1)用数组名做首地址p=a;表示将数组a的起始地址赋值给指针p,而不是将数组a的所有元素赋值给指针p。将数组a的起始地址赋值给指针也可以在指针定义的同时进行。如下:inta[30];int*p=a;/*指针的初始化*/这里int*p=a的含义是在定义指针变量p的同时,将数组a的起始地址赋值给指针变量p,而不是赋值给指针p指向的变量(即*p)。*2)用数组第一个元素的地址做首地址p=a[0];数组名a与数组元素a[0
文档评论(0)