为什么变量变为零?

时间:2014-01-29 20:42:29

标签: c types casting ctype typecasting-operator

测试在Linux 32bit:

我在我的C代码中发现了一个错误,我简化了代码并将其放在此处:

#define al *(char*)(eax_ptr)
int eax = 0;
int *eax_ptr = &eax;
int edx = 0;
char hh = 254;
.......

eax = hh;
edx = al;

问题是,edx应该是254,但我使用gdb进行调试, 我fold edx等于零。

有谁可以帮我解决这个问题..?

谢谢!

1 个答案:

答案 0 :(得分:2)

此代码的结果无法预测。初始化

char hh = 254;

不保证在每个平台上都能成功。 char可能无法容纳254(如果您的平台使用签名字符和8位字符,则不是这样,这是常见的选择。)

假设char 可以保留254之类的值,则此分配:

eax = hh;

通过插入前导零将hh扩展为整数的大小。当你稍后将eax(一个整数)解释为它是一个char(这实际上是你正在使用的转换)时,结果将取决于你的机器的字节顺序:如果它是小端,它将读取254,否则,它将读为0.