Chinaunix

标题: 问个简单程序 [打印本页]

作者: 用心学编程    时间: 2005-09-19 20:54
标题: 问个简单程序
#include<iostream.h>;
void main(){
int a(7),*pi;
double b(5.6321),*pd;
void *pv;
pi = &amp;
pv = &amp;
cout<<*pi<<endl;
pd = (double *)pv;//此句不明白
cout<<*pd<<endl;
}
注:请高手指教,表嫌问题简单,谢谢!
作者: mq110    时间: 2005-09-19 21:08
标题: 问个简单程序
>;>;pd = (double *)pv;//此句不明白

强制类型转换。 将void *型指针 转换成double *型指针.
作者: renstone921    时间: 2005-09-19 21:10
标题: 问个简单程序
void *pv;这里定义了一个void*类型的指针,所谓void*的含义就是指向任何,你的代码应当是这样吧。

  1. pi = &
  2. pv = &
复制代码

在你把b的地址赋给pv后,由于pv是void*类型的指针,也就是说它可以指向任何变量,也就是它的值可以是任何一种类型变量的地址,所以也可以认为它的关于所指向变量的类型信息丢失了。
通过

  1. pd = (double *)pv;
复制代码

这是一种强制类型转换,也就是告诉编译器,pd的值被初始化成pv得值,并且通过pd可以访问已pv的值为起始地址的8个字节的空间,把这八个字节认为是一个double类型的数值。

然后,通过*运算符,引用pd所指向的double存储空间的值。

推荐一本书,《c和指针》
作者: 1jjk    时间: 2005-09-19 21:39
标题: 问个简单程序
楼上推荐书了
我就推荐一个站点吧
www.softpub.cn
作者: 用心学编程    时间: 2005-09-20 00:01
标题: 问个简单程序
首先,谢谢了!
应该是
pi = &amp;
pv = &amp;
没贴好,pv定义为空指针可以指向任何类型的变量啊,为何不能直接输出*pv?pv在系统中怎么识别啊?只能用强制转换么?
作者: 用心学编程    时间: 2005-09-20 00:02
标题: 问个简单程序
pi = &amp;
pv = &amp;
a,b怎么贴不上呢?奇怪了。
作者: 晴天鱼鱼    时间: 2005-09-21 21:53
标题: 问个简单程序
pi=&
pv=&
这个不行的.必须后面要有个变量
//pi=&amp;
//pv=&amp;
作者: 晴天鱼鱼    时间: 2005-09-21 22:10
标题: 问个简单程序
p=&
q=&
这样不行的哈,后面要有个变量,把它的地址赋给指针
//p=&a
//q=&d




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2