打印

强制转换不强制转换了会有什么结果

[复制链接]
1623|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
renyaq|  楼主 | 2012-10-10 20:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zyf部长| | 2012-10-10 20:23 | 只看该作者
避免警告或错误,取决于具体的编译器

使用特权

评论回复
板凳
kangzj| | 2012-10-10 20:24 | 只看该作者
这个是取决于编译器的,一般情况下编译器都默认为int型,你不转换也没关系,编译器会帮你强制转换。

使用特权

评论回复
地板
llljh| | 2012-10-10 20:25 | 只看该作者
最好进行强制转换,是个好习惯。

使用特权

评论回复
5
ousj| | 2012-10-10 20:28 | 只看该作者
省个warning

使用特权

评论回复
6
司徒老鹰| | 2012-10-10 20:28 | 只看该作者
强制转换是为了明确的通知编译器, 以免编译器迷糊。例如, 一个 0x12ff7c 可以是一个 32-bit 的 int, 也可以被认为是 64-bit 的long, 或者是一个 float, 当然也可以是一个常数地址。但是一般不会把0x12ff7c直接作为float 或者是常数地址, 所以做编译器的人会认为这很可能是一个笔误, 给出一个 warning 是负责任的表现。

使用特权

评论回复
7
chuxh| | 2012-10-10 20:33 | 只看该作者
是的,因此, 用强制转换明确的通知编译器:这不是一个笔误, 是我特意要这么做的, 我清楚地知道后果。

使用特权

评论回复
8
kangzj| | 2012-10-10 20:33 | 只看该作者
int*p;
p=0x12ff7c;
*p=0x100;

即p= (int*)0x12ff7c;这句的强制转换不强制转换了会有什么结果呢?

我认为p=0x12ff7c;这一句编译都通不过啊,在语法上就是错误的,将int类型的数据赋值给指针类型的数据,在语法上是错误的

使用特权

评论回复
9
renyaq|  楼主 | 2012-10-10 20:36 | 只看该作者
好的,明白了,多谢了哈

使用特权

评论回复
10
renyaq|  楼主 | 2012-10-10 20:36 | 只看该作者
那我就先结贴了

使用特权

评论回复
11
hjs1618| | 2012-10-11 08:37 | 只看该作者
要强制转换,习惯!@

使用特权

评论回复
12
hawksabre| | 2012-10-11 18:21 | 只看该作者
强制类型转换是说,在编程的时候必须手动进行转换,因为这种转换可能会发生溢出、转换不成功等问题   ,因此,除非能够确定强制转换一定是成功的,否则务必确定需转换函数范围

使用特权

评论回复
13
hawksabre| | 2012-10-11 18:25 | 只看该作者
隐式转换是由编译器自动进行类型转换,因为这样是不会出现溢出、转换失败的问题的,这样会方便些。例如,从范围较小的数值到范围较大的数值、从派生类到基类的转换都是隐式类型转换   隐式转换相对比较安全    由编译器完成

使用特权

评论回复
14
hawksabre| | 2012-10-11 18:26 | 只看该作者
这一块涉及到语言本身的含义问题   建议将C语言学一学   这个以后用得很多    呵呵   希望能帮到你

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

700

主题

10138

帖子

4

粉丝