Autor Tema: Incrementar contenido de un puntero  (Leído 1834 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Incrementar contenido de un puntero
« en: 24 de Febrero de 2017, 14:28:07 »
Esto es válido en XC8:

Código: C
  1. *(puntero) ++;

porque no hace nada, no incrementa el valor, sin embargo esto si:

Código: C
  1. *(puntero) = *(puntero) + 1;

Gracias, un saludo!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Incrementar contenido de un puntero
« Respuesta #1 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
  1. *ptr++
  2. //o
  3. *(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
  1. (*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)

https://es.wikipedia.org/wiki/Anexo:Operadores_de_C_y_C%2B%2B

La precendecia esta en orden descendente y cada fila o ciertos operadores tienen una asociatividad especifica.
« Última modificación: 24 de Febrero de 2017, 16:00:48 por KILLERJC »

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3216
Re:Incrementar contenido de un puntero
« Respuesta #2 en: 24 de Febrero de 2017, 21:18:33 »
OK, gracias!!!

No habia caido en que podia ser un problema de precedencia de operadores, pensé que quizas el xc8 no soportaba esa forma de operar.

Saludos!!!
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡


 

anything