In computer programming there are variables that store a value, and there are variables that store a memory address. The value you first found is the one that stores the address. It's fine, it's going to do what you want, but the problem is that when you restart, that value will become useless. Why? It's because something up the chain came up with the memory location in which that variable is stored. Kind of like how the white house has an address, but essentially, we can re-designate where the white is supposed to be at any time. I hope that analogy helps.
Anyways, in the memory search, what you're looking is a variable that has stored the memory location of something pointing to the variable that stores the ammo. To break it down, it's kind of like:
pointer -> ammo address.
Pointers are kind of like windows shortcuts, you can delete them, but it's just a quicker way to get to the executable that actually does things. In most games, there are many layers of such pointers.
Base Pointer -> pointer -> pointer -> pointer -> pointer -> ammo storage.
The base pointer is essentially the pointer that will never change, and will always ultimately point back to the ammo storage address, it's the most reliable one, and that's why we use and store it. It's useful not only because it saves us time, but can be reliably used in any programs we write.
Fleep does a great job covering the topic in the following video, enjoy:
[video=youtube;N44nk9URoG8]https://www.youtube.com/watch?v=N44nk9URoG8&feature=plcp[/video]