Memory address and memory location are often synonymous.
If you have virtual memory, paging, or other exotica then there are reasons to (possibly) distinguish between them.
You might distinguish them by reasoning that the memory address is the way that a particular memory location is identified.
So an analogy would be a street address vs. a street location.
A street address might be 33 Main Street. A street location is a particular block, and it might be two blocks down Main Street, then second on the left. This location is identified by an address. Perhaps its address is 33 Main Street.
So you might say that I will store a number *AT* this memory address, in which case the memory location is found by using that address and the number is then stored *IN* that location.
Depending on memory addressing, some memory locations can have more than one address, some addresses might not refer to a memory location at all. And some addresses may refer to multiple locations depending on some configuration.
However, in the simplest case, there is a range of valid memory addresses and these uniquely identify all of your memory locations. In this simple case, the difference in meaning can be largely ignored.