Considere el siguiente fragmento de código:Aritmética de punteros en C
int (*p)[3];
int (*q)[3];
q = p;
q++;
printf("%d, %d\n", q, p);
printf("%d\n", q-p);
Sé que la aritmética de punteros es inteligente, lo que significa que la operación q++
avances q
suficientes bytes por delante para que apunte a un lado 3-enteros-array, por lo no me sorprende que la primera impresión es '12, 0
' lo que significa que incrementando q
hizo más grande en 12.
Pero la segunda impresión hace me sorprende. ¡Imprime 1!
¿Por qué imprimiría 1 en lugar de 12? solo me desconcierta.
¿Así que no hay forma de tomar dos punteros y obtener su diferencia en bytes? –
Lanza los punteros a (char *) y obtendrás la diferencia en bytes. –
@Leif: O simplemente multiplique la diferencia por sizeof (your_type). –