Ejemplos basados en arreglos.
Acceso a componentes del arreglo.El acceso a componentes se realiza vĂa indirecciĂłn de un puntero constante que es el nombre del
arreglo, con un offset dado por el Ăndice del elemento.
Se definen tipos de datos.
typedef int Tipo; /* tipo de item del arreglo */
typedef int Indice; /* tipo del Ăndice */
Es práctica usual, definir mediante una constante el tamaño máximo del arreglo
#define MaxEntradas 10
Se definen e inician con valores dos arreglos
Tipo A[MaxEntradas]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Tipo B[MaxEntradas]={ 10,11,12,13,14,15,16,17,18,19};
A las funciones que manipulan arreglos se les suele pasar el arreglo por referencia.
Por ejemplo la funciĂłn que imprime en una lĂnea las componentes de un arreglo a.
void mostrar(Tipo *a, Indice inferior, Indice superior)
{
Indice i;
for (i = inferior; i <= superior; i++) printf(" %d ", a[i]);
putchar('\n');
}
Note que el primer argumento de la función también puede escribirse: Tipo a[].
Ejemplos de uso:
mostrar(A, 0, 4); imprime 0 1 2 3 4
mostrar(A+2, 0, 4); imprime 2 3 4 5 6
La manipulaciĂłn de arreglos no suele verificar el rango del Ăndice. En el caso de haberse
definido adyacentes los arreglos A y B, la referencia a A[12] está accesando efectivamente a
B[2], por eso se muestra un 12; pero es un error por acceso fuera de rango.
printf(" %d \n", A[12]); imprime 12
printf(" %d \n", B[-2]); imprime 8
printf(" %d \n", A[-1]); imprime cualquier cosa que estuviera almacenada antes de A
printf(" %d \n", 1[-1+B] ); imprime 10
printf(" %d \n", -1[B] ); imprime -11 (es una referencia correcta)
Similares errores pueden generarse accesando componentes indireccionando vĂa puntero:
printf(" %d \n", *(A+12)); imprime 12
printf(" %d \n", *(-2+B)); imprime 8
Los ejemplos anteriores ilustran que el acceso a componentes de un arreglo se efectĂşa mediante
indirecciĂłn con el puntero que es el nombre del arreglo.
La expresiĂłn: A[c] se interpreta como el contenido de la direcciĂłn:
A + c*(tamaño del tipo del arreglo).
Donde A es la direcciĂłn de la primera componente del arreglo.
Empleando el lenguaje:
A[c] equivale a: *(A+c) y A es equivalente a &A[0].