如何将指针递增 n 个字节
How to increment a pointer by n bytes
有时我需要将指针递增 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
希望这有帮助!
相关文章:
- 将字节数组转换为带有字节序问题的指针
- 向指针地址添加 20 个字节偏移量
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 通过浮点指针操作字节向量
- 复制后删除原始数组指针将前 3 个字节设置为 0
- 将uint64_t转换为字节时从不同大小的整数强制转换为指针
- C++向指针地址添加 4 个字节
- 将constexpr字节数组与缓冲区的一部分(指向数据的指针)进行比较
- 从字节指针读取位的差异
- 读取字节后丢失指针
- C++如何从文件中读取十六进制字节并将其存储为指针
- 以C++(Arduino)为单位比较指针到字节
- 2 个指针,0 字节相差但不相等
- Valgrind:将一个指针分配给另一个指针后丢失字节
- ::运算符 delete(指针) 返回释放的字节大小
- _declSpec(Align(16))不将指针与16个字节对齐
- i2c中的字节指针数组
- 如何在 JNA 中获取字节数组作为从 C 字节指针返回的返回
- reinterpret_cast<字符*>(p)或static_cast<字符*>((void*)p))表示字节指针差,哪个更好?
- c++到c#:有3个元素的字节指针数组等于什么?