C++ 指针加法被乘
C++ Pointer addition being multiplied
我正在处理数据包代码,需要将指针移动 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>
谢谢,
麦克
pointer = pointer + X;
不会将指针移动 X
字节,而是将其移动 X * sizeof(*pointer)
字节。在这种情况下,如果 struct
的大小是 2 个字节,pointer = pointer + 3
应该将它移动 6 个字节,它有。
当你使用
pointer = pointer + 3;
pointer
前后数值相差3*sizeof(*pointer)
.
在你的例子中,由于 sizeof(*pointer)
是 2
,你看到相差 6。一切正常。
C 和 C++ 中的指针加法总是将您添加的内容乘以指针指向的内容的大小。所以如果 p
是指向 int
的指针,那么 p+1
是指向下一个 int
的指针,而不是下一个字节。如果您想按精确字节访问指针,则必须确保它们是指向 char
或其他 1 字节类型的指针。 ((char*)p)+1
总是指向 p
之后的字节,无论其类型如何。
如果你真的想将你的指针增加 1 个字节,你可以创建另一个指针并增加它以获得地址,然后将它的地址分配给现有指针:
char *newPointer = (char *)pointer;
newPointer = newPointer + 1;
然后您可以通过以下方式将值重新分配给 pointer
:
pointer = &newPointer;
尽管像其他人所说的那样要小心,因为您将不再是您认为自己在结构中的位置。
我正在处理数据包代码,需要将指针移动 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>
谢谢,
麦克
pointer = pointer + X;
不会将指针移动 X
字节,而是将其移动 X * sizeof(*pointer)
字节。在这种情况下,如果 struct
的大小是 2 个字节,pointer = pointer + 3
应该将它移动 6 个字节,它有。
当你使用
pointer = pointer + 3;
pointer
前后数值相差3*sizeof(*pointer)
.
在你的例子中,由于 sizeof(*pointer)
是 2
,你看到相差 6。一切正常。
C 和 C++ 中的指针加法总是将您添加的内容乘以指针指向的内容的大小。所以如果 p
是指向 int
的指针,那么 p+1
是指向下一个 int
的指针,而不是下一个字节。如果您想按精确字节访问指针,则必须确保它们是指向 char
或其他 1 字节类型的指针。 ((char*)p)+1
总是指向 p
之后的字节,无论其类型如何。
如果你真的想将你的指针增加 1 个字节,你可以创建另一个指针并增加它以获得地址,然后将它的地址分配给现有指针:
char *newPointer = (char *)pointer;
newPointer = newPointer + 1;
然后您可以通过以下方式将值重新分配给 pointer
:
pointer = &newPointer;
尽管像其他人所说的那样要小心,因为您将不再是您认为自己在结构中的位置。