Добавление перемещает указатель вперед на один, заставляя его указывать на второй 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
(в тех случаях, когда типы связаны наследованием; такое использование в целом гораздо безопаснее).