Why change the variable content?
Well, it's easy, as you are using pointers. If the original place gets changed, you can see changed value because you don't have your own copy.

Your if statement is also wrong, as you are comparing two pointers here. They will be different at the first time comparation, but after the assigment they are unlikely to change.

The solution is using:

byte uidList[NR_OF_READERS][8]; // better to use some constant value instead of magic number


and memcpy for making a copy and memcmp for comparing its content. Both are from &lt;cstring&gt; include