打印

语句 *((char *)&FhZero) 是什么意思?

[复制链接]
2554|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sackfc|  楼主 | 2011-6-12 08:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
fontlose| | 2011-6-12 08:39 | 只看该作者
&FhZero取变量FhZero的地址,(char *)再把这个地址强制换成指向char的指针,最后取这个值

使用特权

评论回复
板凳
sackfc|  楼主 | 2011-6-12 08:50 | 只看该作者
&FhZero取变量FhZero的地址,(char *)再把这个地址强制换成指向char的指针,最后取这个值
fontlose 发表于 2011-6-12 08:39

没太看明白,那最后的结果和变量FhZero是什么关系?

使用特权

评论回复
地板
fontlose| | 2011-6-12 08:58 | 只看该作者
就是读变量所在的内存地址开始的第一个字节

使用特权

评论回复
5
sackfc|  楼主 | 2011-6-12 09:07 | 只看该作者
就是读变量所在的内存地址开始的第一个字节
fontlose 发表于 2011-6-12 08:58

我理解为:*((char *)&FhZero) ,其结果其实就是FhZero,对不?

使用特权

评论回复
6
红金龙吸味| | 2011-6-12 09:55 | 只看该作者
参考4L。LZ要弄清楚数据类型的概念。

使用特权

评论回复
7
fontlose| | 2011-6-12 12:06 | 只看该作者
晕 1个小时才能发5贴,要等一个小时才能回复。

如果是FhZero是char变量就是
short变量如果单片机是小端模式时  就是short变量的低8位了

使用特权

评论回复
8
lilihua0721| | 2011-6-12 13:00 | 只看该作者
4、7楼正解!

使用特权

评论回复
9
yuyi21ic| | 2011-6-12 13:54 | 只看该作者
7L解释的正确。

使用特权

评论回复
10
jack_shine| | 2011-6-12 17:52 | 只看该作者
7# fontlose 一小时限发五帖?  什么时候的规定

使用特权

评论回复
11
hanyy1988| | 2011-6-18 00:15 | 只看该作者
谢谢楼主提问,学习了啊

使用特权

评论回复
12
joyme| | 2011-6-18 10:41 | 只看该作者
估计是考试用的吧,程序没有必要写得这么晦涩

不管在内存里怎么存,程序定义的变量取低8位都可以直接 (char)VAL&0xff
除非定义的是指针才需要考虑内存里的存放顺序(即大小模式)

使用特权

评论回复
13
johnwjl| | 2011-6-18 16:42 | 只看该作者
用指针确实要考虑大小端模式,从以下大小端判断函数可窥见一斑。

// 测试大小端模式
// 返回 0:big endian     大端模式(高字节低地址,低字节高地址)
// 返回 1:little endian  小端模式(高字节高地址,低字节低地址)
unsigned char IDE_test_endian(void)
{
  unsigned int a = 0x1234;
  return (*((unsigned char *)&a) == 0x34);
}

使用特权

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

本版积分规则

个人签名:活到老,学到老

13

主题

69

帖子

1

粉丝