首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在uint32中添加uint32 32*

在uint32中添加uint32 32*
EN

Stack Overflow用户
提问于 2014-03-19 21:40:06
回答 5查看 988关注 0票数 0

我很难理解指针算法。任何帮助都将不胜感激。

代码语言:javascript
复制
uint32* valA = 0x80000000; 
uint32 valB = 0x7a0

valA += valB;

valA的值为0x80001e80。这是valB的四倍。

我有疑问: 1.为什么valA的值没有变化到0x800007a0。2.如何使valA仅以0x7a0而不是valB值的4倍递增。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-03-19 21:42:51

C中的指针算法根据类型的大小进行缩放,这使得这两个等价:

代码语言:javascript
复制
valA = valA + valB;
valA = &valA[valB];

如果要强制它将其视为字节偏移量,则首先需要将其转换为char *

代码语言:javascript
复制
valA = (uint32 *)((char *)valA + valB);
票数 4
EN

Stack Overflow用户

发布于 2014-03-19 21:44:16

指针算法是指针所指向的数据大小的问题。

uint32大小为4字节,因为结果是valB的4倍。

问题是,为什么希望指针只增加0x7a0。在这种情况下这是不合理的。只有当您需要访问字节时,它才会有用。如果需要的话,可以使用指向字节的指针。

票数 0
EN

Stack Overflow用户

发布于 2014-03-19 21:44:20

向指针中添加int将使指针所指向的数据类型的多个实例向前推进。也就是说,如果系统的sizeof(uint)是4个字节,则整数在被添加到指针地址之前乘以4。

本质上,指针数学与数组寻址是同构的。如果p是指针,i是整数,则p[i]*(p+i)相同.在旧的C编译器中,您甚至可以将其编写为i[p],并获得相同的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22518671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档