关于intptr_t,64位linux系统中void *与int转换
来源:互联网 发布:逻辑回归的数据集 编辑:程序博客网 时间:2024/05/09 12:48
intptr_t是为了跨平台,其长度总是所在平台的位数,所以用来存放地址。
学习linux多线程时看别人的示例代码直接将void * 转化为int,在自己的程序中也这样写可是提示
error: cast from 'void*' to 'int' loses precision [-fpermissive]。
经过学习,在32位系统中上述转换是可以的,因为在32位系统中int为4字节,地址也为4字节,所以可以直接转换,不会损失精度。
但是在64位系统中,int依旧为4字节,但是地址已经变为64位了,所以直接转换会损失精度。
解决办法:
(1)这时就可以使用intptr_t来进行转换,因为intptr_t就是为了跨平台而存在的,总是所在平台的位数,不会损失精度。
(2)另一种方法是使用unsigned long 来进行转换,因为unsigned long 在32位平台是4字节,在64位平台占用8字节,与地址占用字节数相同也不会损失精度,所以也可以。
参考文章:
intptr_t详解:http://blog.csdn.net/macchan/article/details/38701811
C语言指针转换为intptr_t类型:http://www.cnblogs.com/Anker/p/3438480.html
0 0
- 关于intptr_t,64位linux系统中void *与int转换
- 关于void*与int的强制转换
- 关于 size_t , uintptr_t , intptr_t, int
- [Linux] 关于64位系统
- void * 和int 类型转换
- 32位Linux与64位Linux系统中指针 小小差别
- java中byte转换int时为何与0xff进行按位与运算
- C语言中int main与void main的区别
- void main与int main(void)
- 关于32位系统中int、float、short、double等占多少个字节
- 关于32位系统中int、float、short、double等占多少个字节
- 关于32位系统中int、float、short、double等占多少个字节
- void main与int main
- java 中 int 与 byte 位运算
- Linux系统32位与64位数据类型长度比较
- Linux系统32位与64位数据类型长度比较
- Linux系统32位与64位数据类型长度比较
- 关于char强制转换成int到底是用0还是用1补位的猜想与检验
- 多缓冲区:
- 百度地图api定位到当前城市
- poj 3295 Tautology(枚举)
- js 输入int类型数字后自动在后面加.00,输入double型保留小数点后两位
- Broadcast广播接收器
- 关于intptr_t,64位linux系统中void *与int转换
- 对面向对象中多态的理解
- 第一个qt程序
- 介绍5款非常棒的移动自动化测试工具
- 常见对象_Integer直接赋值的面试题
- Delete Node in a Linked List ---LeetCode
- oracle数据库实例、表空间和用户的关系
- 初始Unity 3D——刚体常用方法
- ubuntu16.04安装matlab2016b