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

求解C++中reinterpret_cast转换后的void指针指向内容

问题解答

你的代码里,reinterpret_cast<void*>(&myStructPtr->myVec)得到的指针,指向的是myVec这个std::vector<int>对象本身的内存地址,而非vector管理的底层元素数组。

具体分析:

  • myVec.data()返回的是vector底层存储int元素的数组首地址,也就是你push进去的第一个元素1所在的内存位置。
  • &myStructPtr->myVec是取myVec这个vector实例自身的地址——vector对象内部会保存管理底层数组所需的元数据,比如:
    • 指向底层数组的指针(也就是data()返回的地址)
    • 当前已存储的元素数量(对应size()的返回值)
    • 容器的容量(对应capacity()的返回值)
      这些元数据占用的内存空间,就是你看到的两个输出地址之间的32字节差值。在64位系统中,指针类型占8字节,多数vector实现会用3个指针存储上述元数据,再加上内存对齐需求,最终vector对象的大小通常是24或32字节,和地址差完全对应。

你可以在代码里加一行验证vector对象的大小:

std::cout << sizeof(myStructPtr->myVec) << std::endl;

运行后会输出这个vector实例占用的字节数,结果应该和两个地址的差值一致。

reinterpret_cast<void*>只是把vector对象的地址转换成无类型指针,并没有改变它指向的目标——它依然指向vector对象本身,而非底层数组。

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:52:35