All of the answers posted here say "you can't." They're right. You can't.
But, and I hesitate to even mention it, there are games that can be played. These games are a bad idea. I do not recommend them in any situation.
What's the game? Stuffing steaky extra data bits into unused parts of the address, and stripping them out wherever you use the address.
So imagine you have pointers to a structure or class that's 32 bytes in size. If you make sure your memory allocations are aligned to a 32 byte address, (which is easy for dynamic allocations but trickier to guarantee for stack ones), the low order bits of the address will all be 0. This means there's 5 free bits at the bottom of the address, enough for you to put flags, ID numbers, status values, etc. The storage is free!
Even if you have an odd structure size, virtually any C or C++ compiler and OS will always align every address to 4 bytes.
In 64 bits, you can usually find a significant number of free bits at the high end of addresses... very likely 16 free unused bits, waiting for you. This is OS dependent of course. And also a bad bad idea to consider. You like danger, don't you?
The two downsides are:
- You have to make sure to mask the
values out before you try to
dereference the pointer, or pass it
to anything that may try. This makes
ugly code.
- You are dancing beyond the edge of the
unportability cliff of stupid
dangers. This is like drinking a
bottle of tequila and walking a frayed
tightrope over hungry tigers. Nude.

(source: ecoworldly.com)
There's so many ways that this will explode into bugs, crashes, and pain. Remember how I said that compilers align memory to at least 4 bytes? Well, that's true. Until you find a new OS that doesn't. And you're tiger food.
So don't do this.
But, that said, it is indeed a way to stuff a little extra info like a type number into every address. You may see this technique in every-byte-counts code, or Obfusicated C.
PS: Really, I mean it, don't do this. Even if you like tigers.