All Processes have their memory separated. As far as each process is concerned, they are the only thing even in memory. They allocate memory and are given pointers to their own Virtual Address Space, which maps to either RAM itself or the pagefile. Most games either store their information in the same places in Virtual Memory or have some other sort of distinctive way of finding where things are in memory externally, and cheat programs simply open the process and read and write to the game program's address space.
I guess one way to show what me and Salmon are describing is with a small example. Let's pretend we have a small little text adventure. The text adventure stores your inventory. Let's try to keep things as simple as possible here, though that might be tricky. Usually, an inventory item would have quite a bit of information. Let's stick to a simple example- each item has a item ID, and a "damage" value, which might work with armor or something. these might be 32-bit integers, so each item is 8 bytes of memory. Usually such an inventory listing will probably be used in several places- as a list in each "room" to show the contents of the room, as a list for each player to show their inventory, and as a list on each enemy as well, to determine what they will drop. If the program is written in C, C++, or another compiled language, usually the order that things are initialized will determine where in Virtual Memory the variables are actually stored. If we go with the simple case that the Player structure is initialized first, that means that the Player structure will always start at a given Virtual Memory address in the game process. a Game cheat program can easily take advantage of this- if it knows the structure, it can wander through the memory itself and see things; for example, the Player Structure would likely contain a pointer to an array of INVITEM's for the inventory. the cheat program can use the Process Memory functions to read from the Player structure location (which will be fixed for each compile, most likely); then it can find the pointer to the array, which will be a pointer within the Virtual Memory address space; it can then continue and read that data and parse and interpret it as needed; if desired even changing, say, item IDs within the process memory on the spot to change items.