关于C++指针的问题

hizhao 2002-08-16 11:36:49
我初学C++,为了练习指针的类型转换编了以下程序,但有问题,请为高手指点。
#include <iostream.h>
void main()
{
int a(7),*pint;
double b(5.6311),*pdouble;
void *pv;
pint=&a;
pv=pint;
cout<<*pv<<endl;
pdouble=(double *)pv;
cout<<*pdouble<<endl;
}
以下是在Visual C++ 6中的编译出错提示:
Compiling...
Array.cpp
E:\CPP\Array.cpp(9) : error C2100: illegal indirection
MSDN上看是讲*pv是空指针,没有指向值,但程序中有定义啊,它的类型应该是int
才对啊,难道VC不支持无类型的指针么?
我初学C++,可能有不对之处,请各位指教。
帮小弟一把,问题在哪里?
...全文
70 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fayekiss 2002-08-18
  • 打赏
  • 举报
回复
指针类型的不同,意思就是,都所指地址的解释不同。
比如:
定义一个“男人”指针,可以指向你(假如你是男人),定义“女人”指针,可以指向你的女朋友。
还有一个指针指向“人”(可以指向所有的人),
如果“人”指针指向一个叫“aaa"的人,你说aaa是男人还是女人。
zhi_chong 2002-08-18
  • 打赏
  • 举报
回复
cout<<*(int*)pv<<endl;
biscuitjet 2002-08-18
  • 打赏
  • 举报
回复
C++为了安全,不支持把其它类型的指针赋给void。
n5 2002-08-18
  • 打赏
  • 举报
回复
好像pdouble输出的值也不对,虽然可以从pv用显式的类型转换使pdouble指向
pv所指向的地址,但用*pdouble输出的值可完全不是7。
即使这样作:
pdouble=(double*)pint ;
输出的值也是不对的。
显示的类型转换虽然允许,但用的时候并不安全,int 和 double差的太多了

我没办法使*pdouble输出7,哪位高手有办法?
hizhao 2002-08-18
  • 打赏
  • 举报
回复
也就是讲C++要显式的转换,而不是在赋值的同时将无类性的指针自动转换为
赋给它值的指针的类型,是这样么,我的理解对么?
n5 2002-08-18
  • 打赏
  • 举报
回复
to jiangpeng:
你理解错了吧?a(7)是对a初始化为7,他并没要声明一个数组啊
netbian 2002-08-18
  • 打赏
  • 举报
回复
dui
n5 2002-08-18
  • 打赏
  • 举报
回复
GodGiven说的对!
jp311 2002-08-18
  • 打赏
  • 举报
回复
int a(7)应该是a[7]
pint=a;
没有必要,a本来就是一个地址
不是VC不支持
而是COUT的<<没有提供VOID的重载
应该进行显示转换
GodGiven 2002-08-18
  • 打赏
  • 举报
回复
空指针不能直接取值

这样改:
cout<<*(int*)pv<<endl;
wshjobless 2002-08-18
  • 打赏
  • 举报
回复
GodGiven说的对!

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧