Understanding arguments in avr/eeprom.h functions

Not sure I understand the use of const either...

If you treat const as strictly left-associative, the ambiguous case is eliminated.

const char * p = "hello";

...don't use this one.

char const * p = "hello";

...char is to the left of const so the char part of the type is constant. p can be changed (point to a different address) but the data it points to cannot be changed.

char * const p = "hello";

...* is to the left so the address is constant. p cannot be changed to a different address but the data it points to can be changed.

char const * const p = "hello";

...neither p nor what it points to can be changed. p is a read-only pointer to read-only data.