关于类型转换

hba 2003-01-09 12:17:24
static stCard
{
BYTE Id,
BYTE Value1,
BYTE Value2,
BYTE Round
}stData;

long l = (stCard)stData; // 为什么不能强转换??

long* lp = (stCard*)&stData; // 指针就行??
...全文
29 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlechang 2003-01-09
  • 打赏
  • 举报
回复
指针是对地址的,而数据是对数据本身的。
cb615cb 2003-01-09
  • 打赏
  • 举报
回复
你看一下强制转化后的结果就知道了,一个long的数能够转化为结构体吗?
而指针就不一样了,指向结构体的指针还是指针。
sr71x71 2003-01-09
  • 打赏
  • 举报
回复
因为数据类型的定义、创建等,需要数据的完全信息。因此在类型转换时编译器为保证转换正确,需要检测类型信息。你给的例子中,一个是结构体一个是整型因此编译器不允许转换(如果是派生类和基类之间的转换就可以)至于指针因为存储的均是地址(整型),类型一样因此可转换。
ckacka 2003-01-09
  • 打赏
  • 举报
回复
指针转换带有很大的随意性,对数据隐藏和保护有很好的作用。

比如像 MFC 中的
struct _POSITION{
};
typedef _POSITION* POSITION;

它对于任何指向结构体的指针都可以强制转换,而你自己还可以根据你自己的定义方式转换回来,这样,只有你自己知道里面有什么数据。

对于你的程序,long l = (stCard)stData; 应该可以这样
long l = reinterpret_cast<long>(stData);
然后再在合适的地方转换回来,但是应该保证他们的存储大小相同。
hba 2003-01-09
  • 打赏
  • 举报
回复
也就是说我要强转换只能通过转指针的方式了?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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