| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1179 人关注过本帖
标题:关于强制类型转换问题
只看楼主 加入收藏
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
最近比较忙,没时间上,不好意思……现已结贴,但是还是想问问关于反汇编的一些更详细的东西……

我很懒,但我讨厌别人说我懒……
2010-06-30 12:16
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:0 
有问题就问撒  我能解答的就解答
2010-06-30 15:29
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
回复 9楼 BlueGuy
完整的代码?才看到额……
你说的是我用来测试但报错的代码吗?
#include<stdio.h>
void main()
{
 float x=3.5;
 long p;
 p=&((int)x);
 printf("%ld",p);
}
第6行会报错啊……
就这样……

我很懒,但我讨厌别人说我懒……
2010-07-01 07:02
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
如果你会汇编语言的话,把汇编其实很容易。很多工具都给相关的功能。
变量的类型其实没什么实际意义,就是给编译器看的,编译器能根据相关类型生成更好更正确的的代码。类型是C语言内部的一个概念,不与硬件相关。
2010-07-03 12:43
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
#include<stdio.h>
void main()
{
    float x=3.5;
    long p;
    p=&((int)x);
    printf("%ld",p);
}

long p;
p=&((int)x);
首先你不应该把一个 地址 赋给一个 整型变量。更不应该把存储 int 的地址 赋给 long型的指针。

所以,我改动下你的代码,方便讨论。
#include<stdio.h>
void main()
{
    float x=3.5;
    int *p;
    p=&((int)x);
    printf("%ld",p);
}

int *p;
p=&((int)x);
写出这样的代码,说明你思维很活跃,不知道你这样做的理由是什么?
&不能用在 表达式,常量,寄存器变量。
(int)x会导致一个临时的存储空间去存储 强转 之后的值,这个临时的存储空间可能是 寄存器。
p=&((int)x); 当这一句执行完后,临时的存储空间就会无效了, 你不能把一个假想的地址赋给 p

另外,这个临时的值到底存储在哪里, 不是由汇编来指定的。 反汇编也只是在翻译c语言。
假如,c标准规定 这个临时的值存储在 内存中的对象, 那么这行代码就是对的。

学习c语言    使用c语言是两回事,还是那句话,我反对从汇编的角度理解 c 语言。

我就是真命天子,顺我者生,逆我者死!
2010-07-03 14:42
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
回复 15楼 BlueGuy
多谢,学习了……
特别是“&不能用在表达式……”这句话,我以前还真的不知道……
谢谢……

我很懒,但我讨厌别人说我懒……
2010-07-20 07:29
vs_inzaghi
Rank: 5Rank: 5
来 自:湖北
等 级:职业侠客
威 望:1
帖 子:303
专家分:364
注 册:2009-8-17
收藏
得分:0 
回复 14楼 pangding
汇编语言我倒是学过,不过学的是8086的……已经是很老的cpu了……
何况,我还真不知道汇编语言和c语言有什么其他联系……
貌似只是编译器把c源程序翻译成汇编语句再交给cpu执行吧?其他的我就不知道了……
更何况,下载了一个IDA又不会操作……
真麻烦……


[ 本帖最后由 vs_inzaghi 于 2010-7-20 07:33 编辑 ]

我很懒,但我讨厌别人说我懒……
2010-07-20 07:31
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
会8086应该看各种反汇编出来的东西都行了吧。

我觉得有时候就是看 C 语言是怎么翻译的,可以加深对很多 C 语句的理解。使用优化选项编译,还可以学很多汇编的优化技术。不是以研究汇编为目的的话,不用学得太深。看不懂的就忽略,没必要抠的太细。
IDA 我也没用过。你是用 VC 的吧?我觉得不用用什么特别的软件,就 VC 自己的那个就行了。
2010-07-20 16:39
快速回复:关于强制类型转换问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017802 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved