如何将指针递增 n 个字节

How to increment a pointer by n bytes

本文关键字:字节 指针      更新时间:2023-10-16

有时我需要将指针递增 8,有时递增 4,有时递增任何值。如何安全地执行此操作,以便我的代码在 Windows 10 和 Unix 中正常运行?我必须这样做,因为我正在使用具有 8 字节整数、4 字节整数和 n 字节数据的内存块。

听起来很简单:((char *)ptr) += 8 .

您只能在数组的上下文中安全地执行指针算术。

您可以指向数组(或标量)后面的元素,但是,指向其他任何内容的行为是未定义的。当然不要尝试取消引用经过数组(或标量)的指针。

在这种情况下,强制转换为 const char* 和随后的指针算术总是允许的。请注意,在 4 字节标量int上强制转换为const char*实际上使您能够将该指针递增 7 倍。(int数据为 3 倍,原始标量末尾的 4 倍增量)。

遵守这些规则,您的程序将与任何操作系统上的任何C++编译器一起使用。

灵玲玺所说的解决方案可以完成这项工作。下面是一个示例,该示例通过将类型转换为 char 并将重新类型转换为所需的数据类型来将指针增加 8 个字节。

int main(){
    int x=3;
    int *ptr=&x;
    printf("%dn", ptr);
    char *p = (char*)ptr;
    p+=8;    //increments pointer by 8 bytes
    ptr = (int *)p;
    printf("%dn",ptr);
}

我的系统中的输出显示:

715794828
715794836

希望这有帮助!