强制转换

2019-08-01 18:28发布

往内存某地址比如0X12FF7C写数据0X100

int*p = (int*)0x12ff7c;
*p=0x100;

如果写成
int*p;
p=0x12ff7c;
*p=0x100;

即p= (int*)0x12ff7c;这句的强制转换不强制转换了会有什么结果呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
wyjie
1楼-- · 2019-08-01 22:13
避免警告或错误,取决于具体的编译器
jlyuan
2楼-- · 2019-08-02 00:17
这个是取决于编译器的,一般情况下编译器都默认为int型,你不转换也没关系,编译器会帮你强制转换。
yszong
3楼-- · 2019-08-02 03:33
最好进行强制转换,是个好习惯。
heweibig
4楼-- · 2019-08-02 07:47
 精彩回答 2  元偷偷看……
wuhany
5楼-- · 2019-08-02 11:15
强制转换是为了明确的通知编译器, 以免编译器迷糊。例如, 一个 0x12ff7c 可以是一个 32-bit 的 int, 也可以被认为是 64-bit 的long, 或者是一个 float, 当然也可以是一个常数地址。但是一般不会把0x12ff7c直接作为float 或者是常数地址, 所以做编译器的人会认为这很可能是一个笔误, 给出一个 warning 是负责任的表现。
zhenykun
6楼-- · 2019-08-02 13:54
是的,因此, 用强制转换明确的通知编译器:这不是一个笔误, 是我特意要这么做的, 我清楚地知道后果。

一周热门 更多>