void指针问题,求解!
本帖最后由 light_bo 于 2013-11-05 18:37:51 编辑 typedef void* PVOID;
struct Size
{
int x;
int y;
};
int main()
{
PVOID p;
Size* pSize=new Size;
pSize->x=1;
pSize->y=2;
p=pSize;
cout<<p->x<<endl;//这两句编译不过
cout<<p->y<<endl;//
return 0;
}
请大家看一看以上代码,为什么那两句编译不过,求原因! c++ void指针
[解决办法]
它是void* 指针,里面有对应的x,y数据!但是没有对应的x,y成员!
所以不能直接访问的!
可以先强制类型转换下
[解决办法]
void*是无类型指针,需要强制转换,例如:
cout<<(Size*)p->x<<endl;
[解决办法]
cout<<((Size*)p)->x<<endl;
cout<<((Size*)p)->y<<endl;
这样编译能通过
[解决办法]
1、2、3楼正解,void*为空指针,指向数据但是没有数据种类信息,所以需要强制转换为特定数据类型的指针才能够使用。
[解决办法]
正解
[解决办法]
void*是无类型指针,需要强制转换,例如:
cout<<(Size*)p->x<<endl;
typedef void* PVOID;
struct Size
{
int x;
int y;
};
int main()
{
PVOID p;
Size* pSize=new Size;
pSize->x=1;
pSize->y=2;
p=pSize;
cout<<p->x<<endl;//这两句编译不过
cout<<p->y<<endl;//
return 0;
}
请大家看一看以上代码,为什么那两句编译不过,求原因!
正解
正解.........................
[解决办法]
简单地说,指向数据的指针有两个属性,“数据地址”和“数据类型”,数据地址用指针的数值来表示,数据类型用指针的类型来表示
而如果只想表示地址不想表示类型,就是用void*指针
所以void* p指针的p->x是无效的,因为没有数据类型的指针p根本不知道struct Size这个结构,自然不明白x是啥玩意y又是啥玩意