搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 【高手请进】这个问题好难理解!
标题:
【高手请进】这个问题好难理解!
只看楼主
lntuzjc
等 级:
新手上路
帖 子: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
等 级:
新手上路
帖 子:45
专家分:0
注 册:2005-3-17
第
2
楼
得分:0
说说自己的看法,有不对的地方请高手指正
首先如果要输出3,3 应将上面程序改为 *p2=(float)*p1我想大家可以理解.
在来分析上面程序的强制转化.我们可以理解为p2=(float *)p1是强制的把p2的值改为了p1的值
也是把一个存储整数的地址赋给了一个存储浮点数的指针.
但是注意p2还是浮点型的指针,
因此此时输出p2指向的值当然得到0
2005-03-24 13:24
coloar123
等 级:
新手上路
帖 子:111
专家分:0
注 册:2005-1-6
第
3
楼
得分: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
等 级:
新手上路
帖 子:111
专家分:0
注 册:2005-1-6
第
4
楼
得分:0
两耳不闻窗外事,专心只读圣贤书
2005-03-24 13:52
agocih
等 级:
新手上路
帖 子:45
专家分:0
注 册:2005-3-17
第
5
楼
得分:0
不会的,另外下面的输出格式也要注意.
2005-03-24 14:12
zhtmark
等 级:
新手上路
帖 子:100
专家分:0
注 册:2005-3-25
第
6
楼
得分:0
p1原来指向两个字节的变量,现在p2存的四个字节的p1的地址.所以p2里前两字节存的是3,后面的不知道.然后3又是小数点后面的位(很小),所以输出整形时,会向零取整.所以是0了.
zhtmark QQ:451361060
2005-03-25 21:55
神vLinux飘飘
来 自:浙江杭州
等 级:
贵宾
威 望:
91
帖 子:6140
专家分:217
注 册:2004-7-17
第
7
楼
得分:0
color123
"如果是改成*p2=(float)*p1的話我的機子說出錯,不知道你們的有沒有這一種現象"
把(float*)写成(float)*确实是个很奇怪的现象
zhtmark
已经很接近答案了,几乎可以说就是答案了.不过我不大同意你后面的:
"所以输出整形时,会向零取整."
如果我%f呢?你认为会输出什么?
淘宝杜琨
2005-03-26 01:03
zhtmark
等 级:
新手上路
帖 子:100
专家分:0
注 册:2005-3-25
第
8
楼
得分:0
我试了,是"3,0.0000000".我觉得他是个很小的数,所以会这样输出.毕竟两各字节和四个字节差的远.对吧.
神,加我得QQ.聊聊.
zhtmark QQ:451361060
2005-03-27 12:12
为了c
等 级:
新手上路
帖 子:62
专家分:0
注 册:2005-2-2
第
9
楼
得分:0
书上只说了“一个指针变量只能指向同一个类型的变量”,并未讲原因!
楼上俩位,别单独聊,写出来吧,我也想知道!!
2005-03-28 00:02
zhtmark
等 级:
新手上路
帖 子:100
专家分:0
注 册:2005-3-25
第
10
楼
得分:0
指向的大小是不同的。一旦指向四个,那么输出的就不对了。明白?
zhtmark QQ:451361060
2005-03-28 12:39
10
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-13857-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 1.830325 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved