Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: micro_pepe en 24 de Febrero de 2017, 14:28:07
Título: Incrementar contenido de un puntero
Publicado por: micro_pepe en 24 de Febrero de 2017, 14:28:07
Esto es válido en XC8:
Código: C
*(puntero)++;
porque no hace nada, no incrementa el valor, sin embargo esto si:
Código: C
*(puntero)=*(puntero)+1;
Gracias, un saludo!!!
Título: Re:Incrementar contenido de un puntero
Publicado por: KILLERJC en 24 de Febrero de 2017, 15:57:06
es por el orden de precedencia.
el ++ tiene mas orden de precedencia que el * (deferenciar o puntero), por lo tanto se "ejecuta" primero
Supongamos que tenes:
ptr=1000; y *ptr = 222;
Hacer:
Código: C
*ptr++
//o
*(ptr)++
Como ambos estan fueras del parentesis primer se ejecuta el ++, por lo tanto ptr se incrementa en 1 unidad (si ocupa 4 bytes el tipo, incrementa en 4), es decir queda en 1001 si a lo que apunta es un byte, luego se accede al contenido de esa memoria. Lo cual no se hace nada con eso. Y es lo mismo que nada. El unico efecto que tuvo fue lo mismo que hacer ptr++;
Distinto esto:
Código: C
(*ptr)++;
Ahora si el operador * se encuentra DENTRO del parentesis, los parentesis y el operador ++ tiene la MISMA precendecia, entonces al tener lo mismo comienza a regir la asociatividad que es de izquierda a derecha en ese caso, por lo tanto primero se ejecuta el parentesis y lo adentro, es decir se accede al contenido de ptr, en este caso es 222 y luego se incrementa en 1, ahora si quedando en 223.
Precendecia y Asociatividad: (Las tablas se encuentras un poco mas abajo del inicio de la pagina)