我不明白为什么指针添加失败。

DWORD *pipebuf=new DWORD[10001];

Command *cr= (Command*)pipebuf;
cr->command=2;
DWORD* rooms=(pipebuf+1); //should work fine..sets the room pointer equal to pipe[2]
*rooms=buff3;  //where buff3=100


但是,pipebuf的值仅包含command的值,不包含buff3的值。但是,当我删除新关键字时,它可以正常工作...为什么?

DWORD = unsigned_int

Command是带有command的DWORD变量的类。

Class Command {
DWORD command;
}

最佳答案

加法将指针向前移动,使其指向数组中的第二个DWORD。 *(pipebuf+1)完全等同于pipebuf[1];代码运行后,*pipebuf aka pipebuf[0] aka cr->command等于2,而*(pipebuf+1) aka *rooms aka pipebuf[1]等于100。

但是请注意,在C ++中,指针类型之间的类型转换通常被认为是不良样式,并且在许多情况下可能会产生不良结果。如果要分配Command的数组,请使用new Command[...];如果要使用DWORD,则不要转换为Command*

有时,您必须在类型之间强制转换指针,但通常只有在完全知道自己在做什么以及为什么不能避免这样做时,才应该这样做。

此外,如果确实需要,则应该使用static_cast(在这种情况下)或dynamic_cast(在类型通过继承关联的情况下;这种用法通常更安全)。

关于c++ - 指针加法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5361128/

10-11 21:12