| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 710 人关注过本帖
标题:【高手请进】这个问题好难理解!
只看楼主 加入收藏
lntuzjc
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2005-3-23
收藏
 问题点数:0 回复次数:9 
【高手请进】这个问题好难理解!
有这样一段程序:
void main( void )
{
   int i=3,*p1;
   float a=1.5,*p2;
   p1=&i;p2=&a;
   p2=(float *)p1;
   printf("%d,%d\n",*p1,*p2);
}
我觉得输出应该是3,3,可是程序输出结果为:3,0。
为什么????????????

搜索更多相关主题的帖子: 理解 这个 问题 
2005-03-23 10:07
agocih
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2005-3-17
收藏
得分:0 
说说自己的看法,有不对的地方请高手指正

首先如果要输出3,3 应将上面程序改为 *p2=(float)*p1我想大家可以理解.
在来分析上面程序的强制转化.我们可以理解为p2=(float *)p1是强制的把p2的值改为了p1的值
也是把一个存储整数的地址赋给了一个存储浮点数的指针.
但是注意p2还是浮点型的指针,
因此此时输出p2指向的值当然得到0

2005-03-24 13:24
coloar123
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2005-1-6
收藏
得分:0 
以下是引用agocih在2005-3-24 13:24:46的发言: 说说自己的看法,有不对的地方请高手指正 首先如果要输出3,3 应将上面程序改为 *p2=(float)*p1我想大家可以理解. 在来分析上面程序的强制转化.我们可以理解为p2=(float *)p1是强制的把p2的值改为了p1的值 也是把一个存储整数的地址赋给了一个存储浮点数的指针. 但是注意p2还是浮点型的指针, 因此此时输出p2指向的值当然得到0
如果是改成*p2=(float)*p1的話我的機子說出錯,不知道你們的有沒有這一種現象

两耳不闻窗外事,专心只读圣贤书
2005-03-24 13:51
coloar123
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2005-1-6
收藏
得分:0 

两耳不闻窗外事,专心只读圣贤书
2005-03-24 13:52
agocih
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2005-3-17
收藏
得分:0 
不会的,另外下面的输出格式也要注意.

2005-03-24 14:12
zhtmark
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2005-3-25
收藏
得分:0 
p1原来指向两个字节的变量,现在p2存的四个字节的p1的地址.所以p2里前两字节存的是3,后面的不知道.然后3又是小数点后面的位(很小),所以输出整形时,会向零取整.所以是0了.

zhtmark QQ:451361060
2005-03-25 21:55
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
color123
"如果是改成*p2=(float)*p1的話我的機子說出錯,不知道你們的有沒有這一種現象"
把(float*)写成(float)*确实是个很奇怪的现象

zhtmark
已经很接近答案了,几乎可以说就是答案了.不过我不大同意你后面的:
"所以输出整形时,会向零取整."
如果我%f呢?你认为会输出什么?

淘宝杜琨
2005-03-26 01:03
zhtmark
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2005-3-25
收藏
得分:0 
我试了,是"3,0.0000000".我觉得他是个很小的数,所以会这样输出.毕竟两各字节和四个字节差的远.对吧.  
神,加我得QQ.聊聊.

zhtmark QQ:451361060
2005-03-27 12:12
为了c
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2005-2-2
收藏
得分:0 
书上只说了“一个指针变量只能指向同一个类型的变量”,并未讲原因!
楼上俩位,别单独聊,写出来吧,我也想知道!!

2005-03-28 00:02
zhtmark
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2005-3-25
收藏
得分:0 
指向的大小是不同的。一旦指向四个,那么输出的就不对了。明白?

zhtmark QQ:451361060
2005-03-28 12:39
快速回复:【高手请进】这个问题好难理解!
数据加载中...
 
   



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

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