c - C 指针上的位移位?

标签 c pointers bitwise-operators

我正在这个 C 项目中,我希望它能提高内存效率。在某些情况下,我使用我编写的动态数组结构的 void * 来保存位。我希望使用全部 64(在本例中)位。

我很快意识到您实际上不能对指针进行任何位操作。所以我的解决方案如下:

void *p;
((unsigned long)p) << 4;
((unsigned long)p) & 3;

这样就完成了工作,但这只是因为在我的计算机上,long 和指针的大小相等。所有(或大多数)架构都会出现这种情况吗?

我真正的问题是:是否有更正确的方法来对指针进行位操作?我原以为这种方法在 C 语言中比较常见(将位打包到 void * 中),但是我可能错了...

最佳答案

如果你的编译器支持,C99 的 <stdint.h> header 提供 intptr_tuintptr_t类型应该足够大以在您的系统上保存一个指针,但它们是整数,因此您可以进行位操作。如果您需要的话,没有比这更便携的了。

关于c - C 指针上的位移位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1845203/

相关文章:

c - 如何修复从不兼容的指针类型传递参数 1 of 'count'

c - 无法理解用于链表的指针

c - 指针地址的区别

c++ - 有没有一种快速的方法/技巧可以在文件的开头添加一位?

java - Java中按位运算符和位移位的有趣行为返回值

c++ - 将整数转换为位

带有函数的c中的字符数组

c - 通过 POSIX tdelete() 访问节点数据

c - 如何释放 C 中的双指针结构?

c - 带引用参数的 printf