Hola amigos de todopic. Tengo una duda con este código con punteros y funciona pero hay una parte que es en la que todavia no caigo y quiero comprenderlo porque me puede -servir para adaptar otro cógigo. Extraido de una libreria para grabar en eeprom interna de un pic.
void write_int16_eeprom(INT_EEPROM_ADDRESS address, int16 data)
{
int8 i;
for(i = 0; i < 2; ++i)
{
write_eeprom(address + i, *((int8 *)(&data) + i));
}
}
Principalmente la sección que no entiendo es la que está dentro del parentesis que engloba a la dirección del puntero:
(int8 *)(&data) + i)
¿como debiera interpretar esto?...quiero conocer mas a fondo a mi amigo uC llevado desde programacion C
.
Segun entendi del genial tutorial de PalitroqueZ y en contexto a write_eeprom el segundo parametro hace referencia al contenido apuntado en data (tiene una direccion dada) y que se va incrementando para ser guardado.
He buscado en el foro y lo mas cercano es este
link. Ojala alguien me ayude ya que es mas para aprender la teoría
si por ejemplo
y=((int8 *)(&data) + i)
y entre parentesis esta siendo declarado como puntero
*(y)
. También se que
data fue declarado antes (en el inicio de la función) como un int16 y el registro donde se almacenará la dirección
data esta declarado implicitamente por el (int8 *) dentro del parentesis. Entonces sacando cuentas (si esta malo no importa, vendria a ser carril mío jaja pero deseo me corrijan) sería lo mismo decir?:
int16 data;
int8 *y;
int8 i;
for(i = 0; i < 2; ++i)
{
y=(&data)+i;
write_eeprom(address + i, *y);
}
Uso CCS 4.104