我很难理解指针算法。任何帮助都将不胜感激。
uint32* valA = 0x80000000;
uint32 valB = 0x7a0
valA += valB;valA的值为0x80001e80。这是valB的四倍。
我有疑问: 1.为什么valA的值没有变化到0x800007a0。2.如何使valA仅以0x7a0而不是valB值的4倍递增。
发布于 2014-03-19 21:42:51
C中的指针算法根据类型的大小进行缩放,这使得这两个等价:
valA = valA + valB;
valA = &valA[valB];如果要强制它将其视为字节偏移量,则首先需要将其转换为char *:
valA = (uint32 *)((char *)valA + valB);发布于 2014-03-19 21:44:16
指针算法是指针所指向的数据大小的问题。
uint32大小为4字节,因为结果是valB的4倍。
问题是,为什么希望指针只增加0x7a0。在这种情况下这是不合理的。只有当您需要访问字节时,它才会有用。如果需要的话,可以使用指向字节的指针。
发布于 2014-03-19 21:44:20
向指针中添加int将使指针所指向的数据类型的多个实例向前推进。也就是说,如果系统的sizeof(uint)是4个字节,则整数在被添加到指针地址之前乘以4。
本质上,指针数学与数组寻址是同构的。如果p是指针,i是整数,则p[i]与*(p+i)相同.在旧的C编译器中,您甚至可以将其编写为i[p],并获得相同的结果。
https://stackoverflow.com/questions/22518671
复制相似问题