void *指针错误,强制类型转换

cobra_chen 2011-12-12 11:04:48

	int *pn = NULL;
void *pv = NULL;
*pn = 4;
pv = pn;
int ntemp = 0;
//ntemp = (int)(*pv); //错误,void *的指针不能进行指针的解引用么?
ntemp = (int)(*pn);


想问一下:
强制转换 等于 内存拷贝?(memcpy ?)
...全文
556 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-12-12
  • 打赏
  • 举报
回复
强制类型转换等于告诉编译器:
程序员要把某个编译器本来以为的旧数据类型当作程序员指定的新类型来看待。
elegant87 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 finewind 的回复:]

靠,你的代码都是错的。
指针初始化指的是让指针指向一个确定的值,不是对指针解引用赋值。
int *pn = NULL;
void *pv = NULL;
int i = 4; // 声明语句,编译器看到这条语句的时候会在内存中开辟空间一段空间,并将这段空间和i绑定。
pn = &i; // 让pn指向i所在的空间。

指针是指向一个地址,当把这个地址的值读出……
[/Quote]
正解

void指针不能直接引用的

需要转换为具体类型的指针才可以引用

int ntemp = 0;
pv = pn;
ntemp = (int *)pv;
fsq2006 2011-12-12
  • 打赏
  • 举报
回复
楼上++
绿野耕夫 2011-12-12
  • 打赏
  • 举报
回复
靠,你的代码都是错的。
指针初始化指的是让指针指向一个确定的值,不是对指针解引用赋值。
int *pn = NULL;
void *pv = NULL;
int i = 4; // 声明语句,编译器看到这条语句的时候会在内存中开辟空间一段空间,并将这段空间和i绑定。
pn = &i; // 让pn指向i所在的空间。

指针是指向一个地址,当把这个地址的值读出来时,需要知道用什么方式读,即要指明指针的类型。比如char需要读1个字节,short需要读2个字节,int需要读4个字节.
void *指针可以用来指向一个地址,但是没法表明这个地址的值应该看作是什么,因此需要强制类型转换(实际就是告诉编译器,你把这个地址的值看作是什么类型)。

int ntemp = 0;
pv = pn;
ntemp = (int *)pv; // 将pv强制转换成指向int型的指针
cobra_chen 2011-12-12
  • 打赏
  • 举报
回复
那强制类型转换呢?
是不是等于memcpy?字节数是被强制转换类型占内存的大小?
pengyouya123 2011-12-12
  • 打赏
  • 举报
回复
你可以先强强制转换,再解引用,C++还不能智能推断出类型,一般来说指针与int同占四个字节,你说是什么类型都可以。
ntemp=*((int*)pv)
不建意使用VOID*,挺荐使用boost::any
ouyh12345 2011-12-12
  • 打赏
  • 举报
回复
错误,void *的指针不能进行指针的解引用么?

对,void *的指针的解引用是什么类型?
shayla 2011-12-12
  • 打赏
  • 举报
回复
*pn = 4; 对空指针赋值,这句话已经错了,要给pn分配内存

ntemp = (int)(*pv); 可更改为ntemp = *((int*)pv);

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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