| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1306 人关注过本帖, 1 人收藏
标题:有点不懂,高手帮个忙
只看楼主 加入收藏
安普留香
Rank: 2
等 级:论坛游民
帖 子:77
专家分:62
注 册:2010-5-17
结帖率:75%
收藏(1)
 问题点数:0 回复次数:15 
有点不懂,高手帮个忙
程序代码:
#include <iostream>
using namespace std;
int main()
{
     int* p=NULL;
     int x;
     double y;
     y=1;
     x=(int)y;
     p=(int*)&y;
     *p=20;
     cout<<*p<<endl;
     cout<<p<<endl;
     cout<<&y<<endl;
     cout<<"x="<<x<<endl;
     cout<<"y="<<y<<endl;
     system("pause");
     return 0;
}     

y的值没有变,那*p=20到底是什么含义??p=(int*)&y;这句到底有何意义
搜索更多相关主题的帖子: std 
2010-08-07 11:22
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
程序代码:
#include <iostream>
using namespace std;
int main()
{
     //int* p=NULL;
     double* p=NULL;
     int x;
     double y;
     y=1;
     x=(int)y;
     //p=(int*)&y;
     p=&y;
     *p=20.0;
     cout<<*p<<endl;
     cout<<p<<endl;
     cout<<&y<<endl;
     cout<<"x="<<x<<endl;
     cout<<"y="<<y<<endl;
     system("pause");
     return 0;
}     

南国利剑
2010-08-07 11:59
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
这样就能够,实现要实现的目的。
但是为什么用int类型就会出现预料之外的结果。
我也不是很明白

南国利剑
2010-08-07 12:00
安普留香
Rank: 2
等 级:论坛游民
帖 子:77
专家分:62
注 册:2010-5-17
收藏
得分:0 
我知道int改成double可以
只是p=(int*)&y既然能够通过编译,那么问题出在哪呢??
实际上我是看到网络编程中的(sockaddr*)&这种转换,有点疑惑。sockaddr和sock_虽然长度一样,但是里面的数据结构不相同,转换之后进行操作如何会不出错???
2010-08-07 12:10
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
收藏
得分:0 
上次看到一个发的贴,还应该是double和int在内存中的位数和表达形式不同(转int,只取了double中8个字节的四个)
我将*p=2000000;在监视器发现y值不等于1.0000000000000而是1.0000000004441,最后打印为1

[ 本帖最后由 lishizelibin 于 2010-8-7 13:02 编辑 ]

惟有学习不断的学习!
2010-08-07 12:58
安普留香
Rank: 2
等 级:论坛游民
帖 子:77
专家分:62
注 册:2010-5-17
收藏
得分:0 
*p到底是什么
2010-08-07 15:18
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
*p=20
就是把p所指向的地址的数据更新为20

南国利剑
2010-08-07 15:42
苗伊
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-08-07 15:42
安普留香
Rank: 2
等 级:论坛游民
帖 子:77
专家分:62
注 册:2010-5-17
收藏
得分:0 
程序在vc6.0上是通过编译的,无需加头文件<stdlib.h>
结果*p=20应该是对&y地址中的数据进行了操作(从运行结果可以看出p=&y),就算类型不同,地址中的数据也应该被修改了
否则*p=20,这里的20赋给了谁
2010-08-07 15:55
安普留香
Rank: 2
等 级:论坛游民
帖 子:77
专家分:62
注 册:2010-5-17
收藏
得分:0 
继续顶
等答案
2010-08-07 18:07
快速回复:有点不懂,高手帮个忙
数据加载中...
 
   



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

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