Arrays y punteros

Anuncio
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
Descargar