我正在处理数据包代码,需要将指针移动X个字节。当我告诉指针pointer = pointer + X;
然后继续通过to_string或cout打印指针时,X * 2已添加到指针中。我尝试过多个值,包括常量和变量。我在操作之前验证了指针的值。当这种情况发生时,我唯一能想到的就是3在某处被移位。有什么想法吗?
示例代码:
cout << "Before: " << pointer << "\n";
pointer = pointer + 3;
cout << "After: " << pointer << "\n";
输出:
Before: 0x7ffff4604e93
After: 0x7ffff4604e99
我的包括:
#include <cstring>
#include <cstdlib>
#include <cstdarg>
谢谢,
麦克
答案 0 :(得分:4)
使用时
pointer = pointer + 3;
之前和之后pointer
的值之间的数值差异为3*sizeof(*pointer)
。
在您的情况下,由于sizeof(*pointer)
为2
,您会看到差异为6.一切正常。
答案 1 :(得分:1)
pointer = pointer + X;
不会将指针移动X
个字节,而是将其移动X * sizeof(*pointer)
个字节。在这种情况下,如果struct
的大小为2个字节,则pointer = pointer + 3
应该将其移动6个字节。
答案 2 :(得分:1)
C和C ++中的指针添加总是将您添加的内容乘以指针指向的大小。因此,如果p
是指向int
的指针,p+1
是指向下一个int
的指针,而不是下一个字节。如果要按精确字节访问指针,则必须确保它们是指向char
或其他1字节类型的指针。 ((char*)p)+1
始终指向p
之后的字节,无论其类型如何。
答案 3 :(得分:1)
如果你真的想要将指针增加1个字节,你可以创建另一个指针并增加指针来获取地址,然后将它的地址分配给现有指针:
char *newPointer = (char *)pointer;
newPointer = newPointer + 1;
然后您可以通过以下方式将值分配回pointer
pointer = &newPointer;
小心,但像其他人一样说,因为你不再认为自己在你的结构中。