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