Lio con tamaño variables char

No no, lo estas dejando bastante claro, veo logico lo de char pi3[0] que apunta a una zona pero sin un bufer, y si a continuacion iria otra variable se corromperian, por ese lado perfecto poner pi3[20].

Lo del char a byte es porque en un futuro pondré lcd que creo q trabaja con char, me queda confirmalo ya q lo tengo abandonado hace tiempo jeje, sino lo haria como bien dices con un byte Dato3[20] por ejemplo. Otra razon por la que lo hice asi es que si quiero que sea un int con byte *Dato3 = (byte *) &pi3; tambien me sirve para pasar de byte a int.

Ahora me queda una cosa por entender de byte *Dato3 = (byte ) &pi3;
Aqui se pasan las direciones de memoria al puntero que apunta al contenido de la memoria no??? trabajando con char o byte me puedo ahorrar esa linea tal que asi y funciona
char pi3[20];
eeprom_read_page(0x50,0,(byte
)pi3,sizeof ji);

Sin embargo con un int tengo que ponerla ya q sino no me va,quedando asi la cosa
int pi2;
byte *Dato2 = (byte *) &pi2;
eeprom_read_page(0x50,26,Dato2,2);