如何将C语言中的int指针转换为void指针?

2026-04-29 13:001阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计793个文字,预计阅读时间需要4分钟。

如何将C语言中的int指针转换为void指针?

整數轉換不是類型兼容轉換,不保證結果正確,使用 `static_cast` 需要謹慎。

  • int 通常太小(32 位),在 64 位系统上无法安全存地址,强行转可能截断高位,运行时崩溃或静默出错
  • 正确做法是先转成 uintptr_t(定义在 <cstdint>),再用 reinterpret_cast<void></void>
  • 反向转换(void* → 整数)也必须走 uintptr_t,不能直接转 int

示例:

uintptr_t addr_val = 0x123456789ABCDEF0ULL; void* p = reinterpret_cast<void*>(addr_val); // ✅ 安全

为什么 void* 不能直接接收 int

因为 void* 是对象指针类型,语义上代表“某个内存地址的起始位置”,而 int 是算术类型。C++ 类型系统严格区分这两类,编译器不会隐式做这种解释性转换——这不是精度问题,是语义越界。

阅读全文

本文共计793个文字,预计阅读时间需要4分钟。

如何将C语言中的int指针转换为void指针?

整數轉換不是類型兼容轉換,不保證結果正確,使用 `static_cast` 需要謹慎。

  • int 通常太小(32 位),在 64 位系统上无法安全存地址,强行转可能截断高位,运行时崩溃或静默出错
  • 正确做法是先转成 uintptr_t(定义在 <cstdint>),再用 reinterpret_cast<void></void>
  • 反向转换(void* → 整数)也必须走 uintptr_t,不能直接转 int

示例:

uintptr_t addr_val = 0x123456789ABCDEF0ULL; void* p = reinterpret_cast<void*>(addr_val); // ✅ 安全

为什么 void* 不能直接接收 int

因为 void* 是对象指针类型,语义上代表“某个内存地址的起始位置”,而 int 是算术类型。C++ 类型系统严格区分这两类,编译器不会隐式做这种解释性转换——这不是精度问题,是语义越界。

阅读全文