Steinin's answer is 100% correct, I would just like to add an analogy.
All software exists within memory when it is running. Memory consists of a huge series of storage areas which are identified by their addresses. Think of it as a warehouse full of boxes where each box has an ID number written on the front. In each box I could store data of some sort (numbers, words, etc). Or I could store the ID number of another box; doing so would make this box a Pointer to the other box.
However the warehouse is much bigger than just my program, it contains the entire computers software; managing this huge storage area is one of the primary jobs of the operating system. The operating system assigns boxes to our program when it requests them, but we have no control over which boxes we get. This doesn't actually matter, you don't write a program to use specific addresses, the language takes care of this for you under the hood. Your code works more like:
- Give me a Box
- Store '7' in it
- Give me another Box
- Store the address of the first Box in the new Box
- etc
Every time a program runs the majority of the data values may be the same, and the relationship between our boxes may be the same, but the actual addresses are different every time. The boxes we get depends on which ones the OS has free when we request them. This means that whenever we create a pointer to another box the actual value of that pointer is different every time. There is nothing that you can do about this, even the software developer who wrote the game would have a great deal of difficulty forcing an address to be the same every time and doing so would be a very bad idea.
Unfortunately you must find the addresses again every time you start the game.
N.B - - A Static Pointer doesn't mean what you think it means, 'Static' is a keyword used in several programming languages to specify a particular type of behavior (which I'll not go into now). Suffice it to say, it does not override the operating system's control of memory.
The reason that your pointer sometimes points to nothing is because nothing (or NULL) is the default state of a pointer, since a pointer could be pointing to anything in memory its very dangerous to leave one lying around pointing to something that you aren't using any more. So programmers assign the NULL value to it to stop it doing damage.