北邮在线物联网开发课程:指针运算.pdfVIP

北邮在线物联网开发课程:指针运算.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北邮在线物联网开发课程:指针运算.pdf

北邮在线物联网开发课程:指针运算 上述程序包含了一些涉及指针值和整型值加法运算的表达式。是不是对指 针进行任何运算都是合法的呢?答案是它可以执行某些运算,但并非所有运算都 合法。除了加法运算之外,你还可以对指针执行一些其他运算,但并不是很多。 指针加上一个整数的结果是另一个指针。问题是,它指向哪里?如果你将一 个字符指针加l,运算结果产生的指针指向内存中的下一个字符。float 占据的内 存空间不止 1 个字节,如果你将一个指向-float 的指针加1,将会发生什么呢?它 会不会指向该float 值内部的某个字节呢? 幸运的是,答案是否定的。当一个指针和一个整数量执行算术运算时,整 数在执行加法运算前始终会根据合适的大小进行调整。这个“合适的大小”就 是指针所指向类型的大小,“调整”就是把整数值和“合适的大小”相乘。为 了更好地说明,试想在某台机器上,float 占据4 个字节。在计算·float 型指针 加3 的表达式时,这个3 将根据float 类型的大小(此例中为4)进行调整(相乘) 。 这样,实际加到指针上的整型值为12。 把3 与指针相加使指针的值增加3 个 float 的大小,而不是3 个字节。这个 行为较之获得一个指向一个 float 值内部某个位置的指针更为合理。表 6 .2 包 含了一些加法运算的例子。调整的美感在于指针算法并不依赖于指针的类型。 换句话说,如果 p 是一个指向 char 的指针,那么表达式 p+1 就指向下一个 char 。。如果p 是个指向:float 的指针,那么p+1 就指向下一个 float,其他类 型也是如此。 表 6.2 指针运算结果 表达式 假定 p 是个指向…的指针 而且*p 的大小是 增加到指针的值 char 1 1 p+1 short 2 2 int 4 4 p+1 double 8 8 char 1 2 p+2 short 2 4 int 4 8 double 8 16 一. 算术运算 c 的指针算术运算只限于两种形式。第1 种形式是 指针±整数 标准定义这种形式只能用于指向数组中某个元素的指针,如下图所示。 并且这类表达式的结果类型也是指针。这种形式也适用于使用 malloc 函数动 态分配获得的内存(见第5.2 节) ,尽管翻遍标准也未见它提及这个事实。 数组中的元素存储于连续的内存位置中,后面元素的地址大于前面元素的 地址。因此,我们很容易看出,对一个指针加 1 使它指向数组中下一个元素, 加 5 使它向右移动 5 个元素的位置,依次类推。把一个指针减去 3 使它向左移 动 3 个元素的位置。对整数进行扩展保证对指针执行加法运算能产生这种结果, 而不管数组元素的长度如何。 对指针执行加法或减法运算之后如果结果指针所指的位置在数组第 1 个元 素的前面或在数组最后一个元素的后面,那么其效果就是未定义的。让指针指 向数组最后一个元素后面的那个位置是合法的,但对这个指针执行问接访问可 能会失败。 是该举个例子的时候了。这里有一个循环,把数组中所有的元素都初始化 为零。(第8 章将讨论类似这种循环和使用下标访问的循环之问的效率比较) 。 #define N_VALUES 5 float values[N_VALUES] float *vp; for(vp=values[0];vpvalues[N_VALUES];) *vp++=0; for 语句的初始部分把Vp 指向数组的第1 个元素。 vp 这个例子中的指针运算是用++操作符完成的。增加值 1 与float 的长度相乘, 其结果加到指针Vp 上。经过

文档评论(0)

jackzjh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档