Introducción a la Programación 12 Arrays y punteros Roberto Marabini — Introduccin a la programacin — ETS – p.1/8 Objetivo Los punteros y los arrays estan intimamente ligados. Para usar los arrays eficientemente es necesario ser capaz de usar punteros con ellos. Roberto Marabini — Introduccin a la programacin — ETS – p.2/8 Un ejemplo Comencemos con un ejemplo: Queremos copiar a en b #define MAX 10 int main() { int a[MAX]; int b[MAX]; int i; for(i=0; i<MAX; i++) a[i]=i; b=a;// return 0; } ¿Por qué esto no funciona? Roberto Marabini — Introduccin a la programacin — ETS – p.3/8 Otro ejemplo Si quieres copiar a en b: #define MAX 10 int main() { int a[MAX]; int b[MAX]; int i; for(i=0; i<MAX; i++) { a[i]=i; b[i]=a[i]; } return 0; } Otra posibilidad es usar memcpy definida en string.h Roberto Marabini — Introduccin a la programacin — ETS – p.4/8 Arrays y Punteros Los arrays son inusuales en cuanto que las variables a y b no son arrays sino punteros a arrays. Además son punteros constantes en cuanto que su valor no se puede variar. Apuntan a la posicion de memoria en la que se guarda a[0] y b[0] respectivamente. Por lo tanto a=b no funciona Roberto Marabini — Introduccin a la programacin — ETS – p.5/8 Arrays y punterosarraypoint.c Gracias a que a es un puntero se pueden hacer cosas interesantes #define MAX 10 void main() { int a[MAX]; int i; int *p; p=a;// p=a; works because a is a pointer. // p=&a[0];. for(i=0; i<MAX; i++) { a[i]=i; printf("%d\n",*p); p++; } } Roberto Marabini — Introduccin a la programacin — ETS – p.6/8 Advertencia Recordad que los limites de un array no se comprueban y que incrementando el valor de un puntero mas allá de la dimensión del array se pueden alterar zonas sensibles de la memoria Roberto Marabini — Introduccin a la programacin — ETS – p.7/8 Problema ¿Cúal es la diferencia entre dump1 y dump2? void dump1(int a[],int nia) { int i; for (i=0; i<nia; i++) printf("%d\n",a[i]); } void dump2(int *p,int nia) { int i; for (i=0; i<nia; i++) printf("%d\n",*p++); } int main(void) { int a[10]; dump1(a,10); dump2(a,10); return 0; } Roberto Marabini — Introduccin a la programacin — ETS – p.8/8