|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 谁能解释这个???
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1372
人关注过本帖
标题:
谁能解释这个???
取消只看楼主
加入收藏
lntuzjc
等 级:
新手上路
帖 子:54
专家分:0
注 册:2005-3-23
楼主
收藏
问题点数:0 回复次数:3
谁能解释这个???
有这样一段程序:
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 14:02
举报帖子
使用道具
赠送鲜花
lntuzjc
等 级:
新手上路
帖 子:54
专家分:0
注 册:2005-3-23
第
2
楼
收藏
得分:0
有问题啊!
你举的例子好像与我的那个不太一样。
你的例子中,是把float型的数,按照整数格式输出,当然就是0了!
可我那个问题是:p1,p2指向的内存空间是一样的,那么,取出来的值不也应该一样吗?
_____________________________________________________________________________
比如
#include <stdio.h>
void main( void )
{
int i=3,*p1;
float a=1.5,*p2;
p1=&i;p2=&a;
printf("%d,%d\n",*p1,*p2);
}
它所輸出的*p2就變成0
2005-03-23 14:30
举报帖子
使用道具
赠送鲜花
lntuzjc
等 级:
新手上路
帖 子:54
专家分:0
注 册:2005-3-23
第
3
楼
收藏
得分:0
我不是十分认可你的解释。你的意思是说:所有的类型转换都会发生数据丢失或者错误?那么,如果这是一道选择题,那么你会选中输出结果是3,0这个答案吗?
2005-03-24 00:26
举报帖子
使用道具
赠送鲜花
lntuzjc
等 级:
新手上路
帖 子:54
专家分:0
注 册:2005-3-23
第
4
楼
收藏
得分:0
我认为,那个题的错误应在于:
int *p1 开始是int 型的,令之指向i,这是没错的.
不过一旦语句:p2=(float *)p1这就出问题了.
因为:这句就等价于:
float *p1;
p1=p2;
那是当然错了.
请记住:指针是没有强制转换的!!!!!!!!!!!!!!!!!
-------------------------------------------------------------------------------------
那么,你的意思是说,我们使用的动态存储分配函数malloc()返回的指针类型无法转换了?可是,我们一直在用啊!
int *p1;
p1=(int *)malloc(sizeof(int));
这是错的吗?
2005-03-28 07:35
举报帖子
使用道具
赠送鲜花
4
1/1页
1
快速回复:
谁能解释这个???
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.037061 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved