我正处于这个 C 项目的中间,我希望提高内存效率。在某些情况下,我使用我编写的动态数组结构的 void *s 来保存位。我希望使用所有 64(在这种情况下)位。
我很快意识到你实际上不能对指针进行任何位操作。所以我的解决方案如下:
void *p;
((unsigned long)p) << 4;
((unsigned long)p) & 3;
这可以完成工作,但这只是因为在我的计算机上,长整数和指针的大小相等。在所有(或大多数)架构中都会出现这种情况吗?
我真正的问题是:有没有更正确的方法来对指针进行位操作? 我曾认为这种方法在 C 中有些常见(将位打包到 void * 中),但我可能弄错了......