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