标题:一个强制转换问题
只看楼主
安普留香
Rank: 2
等 级:论坛游民
帖 子:77
专家分:62
注 册:2010-5-17
结帖率:75%
 问题点数:0 回复次数:8 
一个强制转换问题
程序代码:
#include <iostream>
using namespace std;
int main()
{
     int* p=NULL;
     int x;
     double y;
     y=1;
     x=(int)y;
     p=(int*)&y;
     cout<<*p<<endl;
     cout<<p<<endl;
     cout<<&y<<endl;
     cout<<"x="<<x<<endl;
     system("pause");
     return 0;
}     
这个代码运行结果*P怎么是0不是1??p明明已经指向y了
搜索更多相关主题的帖子: std 
2010-06-19 00:32
zgxyz2008
Rank: 4
等 级:业余侠客
帖 子:67
专家分:202
注 册:2008-10-28
得分:0 
p=(int*)&y;//表示将y的地址强制转换为int*型并赋给P,相当于给p赋值,并不表示将P指向y。
2010-06-19 04:09
飞天猪1000
Rank: 1
等 级:新手上路
帖 子:19
专家分:6
注 册:2010-6-18
得分:0 
#include <iostream>
using namespace std;
int main()
{
     double* p=NULL;
     int x;
     double y;
     y=1;
     x=(int)y;
     p=&y;
     cout<<*p<<endl;
     cout<<p<<endl;
     cout<<&y<<endl;
     cout<<"x="<<x<<endl;
     system("pause");
     return 0;
}
这样应该可以了,但是不知道是不是编译器的问题,我在visual studio编译的时候依然出错,在vc6.0就不会.
2010-06-19 16:06
安普留香
Rank: 2
等 级:论坛游民
帖 子:77
专家分:62
注 册:2010-5-17
得分:0 
我是在vc6.0上运行的
3楼给的代码是可行的
但是是2楼说的把y地址赋给p,那么p不就指向y了吗
2010-06-19 17:03
laigaoat2005
Rank: 4
等 级:业余侠客
帖 子:388
专家分:226
注 册:2007-4-5
得分:0 
回三楼:
但是是2楼说的把y地址赋给p,那么p不就指向y了吗
不是.
把y地址转换成int后就不是地址了
2010-06-19 20:49
安普留香
Rank: 2
等 级:论坛游民
帖 子:77
专家分:62
注 册:2010-5-17
得分:0 
代码的运行结果显示p和&y的值相同,而p是指针却又没有指向y??
2010-06-19 21:28
wuliqv
Rank: 1
等 级:新手上路
帖 子:6
专家分:6
注 册:2008-3-22
得分:0 
毫无疑问,指针p和y指的是同一块内存,只是它们的位数和表示方式不同。
2010-06-19 22:05
安普留香
Rank: 2
等 级:论坛游民
帖 子:77
专家分:62
注 册:2010-5-17
得分:0 
指向sockaddr_in的指针和指向sockaddr的指针相互转化的时候就是:(struct sockaddr*)&my_addr
这也是将地址转化成指针,那也会有问题吧
2010-06-20 18:55
wuliqv
Rank: 1
等 级:新手上路
帖 子:6
专家分:6
注 册:2008-3-22
得分:0 
实际上sockaddr_in 和 sockaddr 是等价的,你可以看一下这两个结构体的成员。
另外你可能对指针和地址这两个概念没有搞清,指针只是地址的另一个说法,它们是指同一个概念。
2010-06-20 21:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-310626-1-1.html




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

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