如何将指针递增n个字节

时间:2016-01-30 19:47:14

标签: c++ pointers

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

3 个答案:

答案 0 :(得分:0)

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

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

我系统中的输出显示:

715794828
715794836

希望这有帮助!

答案 1 :(得分:0)

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

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

在这样的上下文中,转换为const char*以及随后的指针算法始终是允许的。请注意,在4字节标量const char*上转换为int实际上使您能够将该指针递增7次。 (int数据的3次,以及原始标量的末尾的另外4次增量。)

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

答案 2 :(得分:0)

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