&score is a prvalue of type "pointer to int".  prvalue means "purely a value that can go on the right-hand side of an assignment statement".
int* score_ptr is an lvalue of type "pointer to int".  That means it can go on the left hand side of an assignment statement.
The difference is that one is a value that has no identity, the other is a variable that has identity.
You cannot do &&score, but you can do &score_ptr. You can assign to score_ptr, you cannot assign to &score.
A pointer is akin to a piece of paper with a street address written on it.  A value is a street address.
A pointer variable is a street address where there is a piece of paper saying where another street address is.
Suppose you where going moving houses every 4 months; maybe you are a coop student in a university.  Giving someone your current address is a waste of time, as it will be garbage in a few months.  Giving them your parent's address, and having them forward your mail to you, makes much more sense.
Here, you live in an int.  If you tell someone your parent's address -- an address to a variable of type int* -- they can send stuff to you even after you move around.