c++ - 为什么你不能对 C 中的指针进行按位运算,有没有办法解决这个问题?

标签 c++ c pointers bit-manipulation

我读到你不能在指针上做位掩码,你为什么不能做 指针的按位运算?

有什么方法可以达到同样的效果吗?

这同样适用于 C++ 吗?

最佳答案

你不能进行按位指针操作的原因是标准规定你不能。我想标准之所以这么说是因为按位指针操作几乎普遍会导致未定义或(充其量)实现定义的行为。因此,与加法等更简单的操作不同,您将无法做到既有用可移植

但你可以通过强制转换来解决它:

#include <stdint.h>

void *ptr1;
// Find page start
void *ptr2 = (void *) ((uintptr_t) ptr1 & ~(uintptr_t) 0xfff)

对于 C++,只需使用 reinterpret_cast 代替 C 风格的强制转换。

关于c++ - 为什么你不能对 C 中的指针进行按位运算,有没有办法解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868313/

相关文章:

c - C 中的 Realloc 和 NULL 指针

c - 这个等式返回 bool 还是 int?

c - 尝试更好地理解指针

C++ : initialize input programmatically

c++ - 将数组索引从一个类传递到另一个C++

c++ - Linux 上的 CUDA 编译错误,但 Windows Visual Studio 成功

c++ - 从 Visual Studio 2012 编译到 g++?

c - 完整后跟子对象未定义行为的部分初始化?

c - 需要更改指针让我遇到问题

将元素添加到 c 中列表开头的代码 - 错误是什么?