关于指针截断

super_admi 2011-01-10 05:57:51
如下代码:

HTREEITEM hd = NULL;
UINT ud;
ud = (UINT32)hd;


在VS 2002中居然出现警告:warning C4311: “类型转换” : 从“HTREEITEM”到“UINT”的指针截断

然后我做了一些尝试,把UINT分别改为:UINT8,UINT16,UINT32,UINT64.

结果,仅仅只有UINT32时,出现指针截断警告。

我去GOOGLE搜索了一下,有人说,64位指针转为32位指针时,会出现指针截断。可是,这里HTREEITEM唯独转为UINT32时出现警告,何解?

莫非这事VS 2002本身的BUG?我在VC 6和VC 2008上没看到这种情况啊。
...全文
667 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesky12312388 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 super_admi 的回复:]

就是这么奇怪。 HTREEITEM 是一个指针类型,因为我要调用SendMessage,所以需要把它转为UINT类型。
32位机器上,默认情况下UINT == UINT32。我把HTREEITEM转为UINT16,UINT8,或者UINT64都不出警告,唯独转为UINT32时出现警告,很是莫名其妙。

引用 4 楼 lanxue_1988 的回复:
指针截断?如果是32位机器的话。。指针……
[/Quote]
试试这样用。
ud = reinterpret_cast<UINT32>(hd);
super_admi 2011-01-11
  • 打赏
  • 举报
回复
就是这么奇怪。 HTREEITEM 是一个指针类型,因为我要调用SendMessage,所以需要把它转为UINT类型。
32位机器上,默认情况下UINT == UINT32。我把HTREEITEM转为UINT16,UINT8,或者UINT64都不出警告,唯独转为UINT32时出现警告,很是莫名其妙。

[Quote=引用 4 楼 lanxue_1988 的回复:]
指针截断?如果是32位机器的话。。指针大小都是4字节。。。
而且。。UINT32 这个类型的话。。。应该是。。。unsigned int。。。也不是指针。。。
[/Quote]
super_admi 2011-01-11
  • 打赏
  • 举报
回复
算了,不理会它了,直接屏蔽掉算了。想来应该不会有什么影响。
super_admi 2011-01-11
  • 打赏
  • 举报
回复
warning C4311: “reinterpret_cast” : 从“HTREEITEM”到“unsigned int”的指针截断
碎碎念 2011-01-10
  • 打赏
  • 举报
回复
指针截断?如果是32位机器的话。。指针大小都是4字节。。。
而且。。UINT32 这个类型的话。。。应该是。。。unsigned int。。。也不是指针。。。
bluesky12312388 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bluesky12312388 的回复:]

HTREEITEM 如果大小 和 你转换的这些UINT8,UINT16,UINT32,UINT64
不一样
就会发生指针截断或者是覆盖,

至于消息提示,不必要在意。

如果你真要知道为什么,
请写信给microsoft
[/Quote]
HTREEITEM 如果大小 和 你转换的这些UINT8,UINT16,UINT32,UINT64
不一样
bluesky12312388 2011-01-10
  • 打赏
  • 举报
回复
HTREEITEM 如果大小 和 你转换的这些UINT8,UINT16,UINT32,UINT64
就会发生指针截断或者是覆盖,

至于消息提示,不必要在意。

如果你真要知道为什么,
请写信给microsoft

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧