首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

void指针有关问题,求解

2013-11-11 
void指针问题,求解!本帖最后由 light_bo 于 2013-11-05 18:37:51 编辑typedef void* PVOIDstruct Size{in

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;


引用:
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;
}

请大家看一看以上代码,为什么那两句编译不过,求原因!

[解决办法]
cout<<((Size*)p)->x<<endl;
cout<<((Size*)p)->y<<endl;
这样编译能通过
[解决办法]
1、2、3楼正解,void*为空指针,指向数据但是没有数据种类信息,所以需要强制转换为特定数据类型的指针才能够使用。
[解决办法]
引用:
void*是无类型指针,需要强制转换,例如:

cout<<(Size*)p->x<<endl;


Quote: 引用:

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;
}

请大家看一看以上代码,为什么那两句编译不过,求原因!

正解
[解决办法]
引用:
Quote: 引用:

void*是无类型指针,需要强制转换,例如:

cout<<(Size*)p->x<<endl;


Quote: 引用:

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又是啥玩意

热点排行