C ++指针添加成倍增加

时间:2015-03-20 19:47:02

标签: c++ c pointers pointer-arithmetic

我正在处理数据包代码,需要将指针移动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>

谢谢,

麦克

4 个答案:

答案 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;

小心,但像其他人一样说,因为你不再认为自己在你的结构中。