解决方法
你不能做按位指针操作的原因是因为标准说你不能.我认为标准说的原因是因为按位指针操作几乎普遍导致未定义或(最多))实现定义的行为.所以没有什么可以做,这是有用和便携式,不像简单的操作,如加法.
但是你可以用铸造来摆脱它:
#include <stdint.h> void *ptr1; // Find page start void *ptr2 = (void *) ((uintptr_t) ptr1 & ~(uintptr_t) 0xfff)
对于C,只需使用reinterpret_cast而不是C风格的转换.