You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中将变量地址转换为uintptr_t类型变量?

当然可以实现!

这正是uintptr_t类型被设计出来的核心场景之一——它就是C标准专门定义的、用来存储指针地址的无符号整数类型。

具体实现步骤:

  1. 首先确保包含标准头文件<stdint.h>,这个头文件里定义了uintptr_t类型;如果需要打印这个值,还要包含<inttypes.h>(部分编译器的<stdint.h>已包含它),里面有对应的跨平台格式化宏。
  2. 通过强制类型转换把指针直接赋值给uintptr_t变量即可,这是C标准允许的安全操作。

修改后的示例代码:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h> // 用于PRIuPTR格式化宏

int main() {
    int y = 1; 
    int *x = &y; 
    // 把指针x的地址存入uintptr_t变量
    uintptr_t ptr_address = (uintptr_t)x; 

    // 如果需要打印这个值,用PRIuPTR保证跨平台兼容性
    printf("指针x指向的地址(uintptr_t类型):%" PRIuPTR "\n", ptr_address);

    // 也可以再把uintptr_t转回指针,结果和原指针等价
    int *recovered_ptr = (int *)ptr_address;
    printf("通过转回的指针访问y的值:%d\n", *recovered_ptr);
    return 0;
}

关键说明:

  • C标准明确规定,uintptr_t是一个足够大的无符号整数类型,能够容纳任何对象指针的地址表示;直接将对象指针转换为uintptr_t是完全合法的。
  • 这种转换是双向安全的:把指针转成uintptr_t,再转回原指针类型,得到的指针和原指针完全等价,可以正常访问指向的对象。

内容的提问来源于stack exchange,提问作者BODDU MANOHAR REDDY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:36:31