这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【C99】uintptrt 类型使用

共1条 1/1 1 跳转至页

【C99】uintptrt 类型使用

高工
2026-10-24 21:42:21     打赏

【简介】

再查看项目代码看到如下的一段代码,如下的代码用来将传输的addr 的数值转换为指针类型。

#define REG64(addr) ((volatile uint64_t *)(uintptr_t)(addr))


如上的代码中使用 uintptr_t 类型,将addr 转换为uintptr_t  然后在强转为uint64 的地址,之前没使用过uintptr_t   类型,网上搜索了下这个类型是C99引入的,以下是文档中对类型的描述。

image.png

按照上面的描述该类型会根据平台会根据指针的类型保持一致,避免信息的丢失,uintptr_t 是一种整数类型,定义在 <stdint.h> 头文件中,表示无符号整数类型,其大小足以存储指针。


任意合法的 void * 指针可转换为该类型值,再将该值转换回 void * 指针后,所得结果与初始指针值相等(在比较操作中判等)。

再大白话一点:主要用途是让我们可以将指针安全地转换为整数,再从整数恢复为指针,而不会丢失信息


有了上述的理解我们就不难理解上述的代码的意义,在跨平台的场景把一个地址转换为指针时先转换为 uintptr_t 确保地址信息和指针类型的地址长度匹配,避免因地址长度不一致造成的异常。

   


           


共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]