That's actually one of the reasons I do and don't like c/c++, pointers are "open access." You can type cast anything to anything, but you have to remember what you've cast something as or you'll access part of something else ... maybe even part of another program.
C++ is actually fairly strict about that sort of thing with normal casts (C-style or static_cast<>), much more so than C is. Now there is reinterpret_cast<> which really is an anything-to-anything cast, but it's got a clunky distinctive name like that for a reason.
What does kill me about C is stuff like slicing, which you can only seem to avoid by using pointers. That and implicit copy constructors -- at least Scala's implicit conversions require an 'implicit' keyword, C++ forces you to opt out with 'explicit'.