Question: In C++, can I simply cast a pointer to a DWORD?

```
MyClass * thing;
DWORD myPtr = (DWORD)thing;

```

Would that work?

Answer: 
In windows its quite common to pass pointers in such way, for example in windows messages. LPARAM is a typedef for LONG\_PTR and quite often is used to pass pointers to some structures. You should use `reinterpret_cast<DWORD_PTR>(thing)` for casting.
<http://en.cppreference.com/w/cpp/language/explicit_cast>

Read that, understand that, avoid C-style casts because they hide a lot.

Doing so may be able to be done, but would make no sense, for example DWORD is 4 bytes and a pointer (these days) is 8.

```
reinterpret_cast<DWORD&>(myPtr);

```

Should work, but it may be undefined or truncate, if anything will work that will!

BTW, `reinterpret_cast` is the C++ way of saying "Trust me my dear compiler, I know what I'm doing" - it attempts to interpret the bits (0s and 1s) of one thing as another, regardless of how much sense that makes.

A legitimate use though is the famous 1/sqrt hack ;)