Variable types with * prefix

The same thing.

    byte y;
    byte *ptr1; // reserve the memory for the address (pointer variable)
    ptr1 = &y; // assign the y address to it
    byte *ptr2 = &y; // reserver the memory for the address (pointer variable) and assign it the y address to it

    Serial.printf ("p&y = %p\n", &y);
    Serial.printf ("ptr1 = %p\n", ptr1); // the same address
    Serial.printf ("ptr2 = %p\n", ptr2); // the same address

So the sequence of compilation (put in brackets) should be considered as { byte *ptr2 } = &y and not byte { *ptr2 = &y }. The latter even doesn't make sense. You can not make the assignment to *ptr before ptr is even declared.