| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1372 人关注过本帖
标题:谁能解释这个???
取消只看楼主 加入收藏
lntuzjc
Rank: 1
等 级:新手上路
帖 子: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
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2005-3-23
收藏
得分: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
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2005-3-23
收藏
得分:0 
我不是十分认可你的解释。你的意思是说:所有的类型转换都会发生数据丢失或者错误?那么,如果这是一道选择题,那么你会选中输出结果是3,0这个答案吗?
2005-03-24 00:26
lntuzjc
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2005-3-23
收藏
得分: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
快速回复:谁能解释这个???
数据加载中...
 
   



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

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