社区
C语言
帖子详情
关于类型转换
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
打赏
收藏
关于类型转换
static stCard { BYTE Id, BYTE Value1, BYTE Value2, BYTE Round }stData; long l = (stCard)stData; // 为什么不能强转换?? long* lp = (stCard*)&stData; // 指针就行??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
也就是说我要强转换只能通过转指针的方式了?
关于
类型转换
、溢出、移位等操作的小总结
类型转换
、溢出、移位等操作标签:c/c++
类型转换
运算符两边操作数的类型转化 此时,操作数类型的转换规则如下:图中的横向箭头:针对运算符两边是同类型的数据(不同级别的类型当然也适用!) 表示必须的转换(虽然运算符两边的操作数类型相同),如两个float型数参加运算,虽然它们类型相同,但仍要先转成double型再进行运算,结果亦为double型。两个char类型的数据进行相关的操作也是一样(
C语言
类型转换
-自动
类型转换
、强制
类型转换
、指针
类型转换
数据
类型转换
就是将数据(变量、数值、表达式的结果等)从一种
类型转换
为另一种类型。 自动
类型转换
自动
类型转换
就是编译器默默地、隐式地、偷偷地进行的数据
类型转换
,这种转换不需要程序员干预,会自动发生。 将一种类型的数据赋值给另外一种类型的变量时就会发生自动
类型转换
,例如: float f = 100; 100 是 int 类型的数据,需要先转换为 float 类型才能赋值给变量 f。再如: int n = f; f 是 float 类型的数据,需要先转换为 int 类型才能赋值给变量 n。 在赋值运算中,
C语言的数据的强制
类型转换
定义:强制
类型转换
是把变量从一种
类型转换
为另一种数据类型。 强制
类型转换
算是C语言中常见常考的一项内容,如对于类型处理不好,将会产生错误结果。对于某些类型的转换编译器可隐式地自动进行,不需人工干预,称这种转换为自动
类型转换
;而有些
类型转换
需要编程者显式指定,通常,把这种
类型转换
称为强制
类型转换
计算机硬件进行算术操作时,要求各操作数的类型具有相同的大小(存储位数)及存储方式。 ...
字符串转换成数字的三种方法
最近经常遇到关于
类型转换
的问题,索性上网搜搜在此总结一篇 js字符转换成数字主要有三种可用的方法:转换函数、强制
类型转换
、利用js变量弱
类型转换
。 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行,对其他类型返回的都是NaN parseInt() ...
java1.8 stream关于
类型转换
的一些问题
类型转换
double[] b1 = (double[])new Object();//Object 可以直接转换数组 double[] b2 = (double[])new Object[3];//error 对象数组不能转基本类型数组 Double[] b3 = new Double[3]; double[] b4 = (do...
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章