A pointer is usually just a memory address on an x86-based architecture (I don't know of other architectures). The compiler provides type safety with different pointers at compile time - because it makes no sense to assign a char pointer to a pointer to an object, for example, especially since the specified objects have different sizes (so you'd capture random memory if you accessed them). You can explicitly override this and assign any pointer to any other pointer using reinterpret_cast<T>or with other types of castings, such as static_cast<T>and dynamic_cast<T>(the last two are usually recommended because they are safer, but each of them has its own uses).
, , . , , , . , , .
(-, STL) , , : , , , , , .. , , .