我读到你不能在指针上做位掩码,你为什么不能做 指针的按位运算?
有什么方法可以达到同样的效果吗?
这同样适用于 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/