En primer lugar, el * operador tiene prioridad sobre el operador ++, y los operadores() tienen prioridad sobre todo lo demás. EDITAR (las cosas son más complicadas que eso, ver edición inferior)
En segundo lugar, el operador de número ++ es el mismo que el operador ++ si no los está asignando a nada. La diferencia es number ++ returns number y luego incrementa el número, y ++ number se incrementa primero y luego lo devuelve.
En tercer lugar, al aumentar el valor de un puntero, lo estás incrementando por el tamaño de su contenido, es decir, lo estás incrementando como si estuvieras iterando en una matriz.
lo tanto, para resumir todo:
ptr++; // Pointer moves to the next int position (as if it was an array)
++ptr; // Pointer moves to the next int position (as if it was an array)
++*ptr; // The value of ptr is incremented
++(*ptr); // The value of ptr is incremented
++*(ptr); // The value of ptr is incremented
*ptr++; // Pointer moves to the next int position (as if it was an array). But returns the old content
(*ptr)++; // The value of ptr is incremented
*(ptr)++; // Pointer moves to the next int position (as if it was an array). But returns the old content
*++ptr; // Pointer moves to the next int position, and then get's accessed, with your code, segfault
*(++ptr); // Pointer moves to the next int position, and then get's accessed, with your code, segfault
Como hay una gran cantidad de casos en que aquí, podría haber hecho algún error, por favor, corríjanme si me equivoco.
EDIT:
Así que estaba mal, la precedencia es un poco más complicado que lo que escribí, ver aquí: http://en.cppreference.com/w/cpp/language/operator_precedence
¿por qué no solo lo ejecuta en el depurador? –
Bueno ... ¿por qué no simplemente * probar * y ver? 'printf' imprimirá un puntero con% p –
Si tiene curiosidad por el comportamiento, simplemente juegue con él. Simplemente escriba un programa c simple que revise todos estos casos de uso y vea si tiene sentido para usted. – Cyrus