Los punteros son un tema difícil, sin duda, pero me he encontrado con este fragmento y simplemente no puedo entender qué es el p[-1] :
#include <stdio.h> int main(void) { int t[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, *p = t; p += 2; p += p[-1]; printf("%d",*p); return 0; }Cada vez que vea una expresión como a[b] en C, puede pensar mentalmente que está sucediendo *(a + b) .
Entonces, es solo "el contenido del elemento anterior al que apunta p en este momento".
Dado que p está en t + 2 , p[-1] se refiere a t[2 + (-1)] es decir, t[1] .
p += p[-1];Se puede escribir como
p = p + *(p-1); En ese punto, p apunta al tercer elemento de la matriz (valor 3 ) y *(p-1) es 2 .
Entonces, es equivalente a
p = p+2; e imprimir *p imprimiría 5 .