我不明白为什么指针添加失败。
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/