Un arreglo es un conjunto de variables del mismo tipo que pueden ser referenciadas a través de un mismo nombre. La forma de identificar a un elemento determinado es a través de un índice.
La declaración
int Array[10];
instruye al compilador a que reserve una cantidad de memoria suficiente para almacenar 10 entidades enteras y referirse a esa memoria a traves del identificador Array. Dado que el número de elementos en un arreglo suele ser utilizado en distintos lugares de un programa, es buen estilo de programación el referenciarlo a través de una constante simbólica:
#define N 10
int Array[N];
Los elementos individuales del arreglo se comiena a numerar a partir del elemento 0, asi, Array[0] individualiza al primer elemento y Array[9] al último.
Los arreglos pueden ser multidimensionales, asi por ejemplo
double Matriz[10][20];
Define una region de memoria como para almacenar 200 reales en doble precisión. La forma en que se organizan en la memoria estos 200 elementos es la siguiente:
Matriz[0][0], Matriz[0][1], Matriz[0][2], ..., Matriz[1][0], Matriz[1][1],...,...,Matriz[9][19]
La inicialización de un arreglo puede realizarse a través de una lista, si la lista es mas corta que el numero de elementos en el arreglo, el resto de los elementos se inicializan a 0. Se puede obviar el tamaño de un arreglo al inicializarlo con una lista, el tamaño será el mismo que el de la lista en este caso. Ej:
float a[5] = {0.1, 1.2, 2.3, 3.4, 4.5};
double b[100] = {1.0}; /* los 99 restantes serán 0.0 */
int a[] = {2, 3, -5, 7}; /* equivale a a[4]={2,3,-5,7} */
Ejemplo:
/*
Utilización de arreglos.
Programa que cuenta cuántas veces se repite cada dígito,
cada carácter separador, y otros carácteres.
*/
#include#define ND 10
int main()
{
int c, i, nWhite = 0, nOther = 0, nDigit[ND];
for(i = 0; i < ND; i++)
nDigit[i] = 0;
while((c = getchar()) != EOF)
if(c >= '0' && c <= '9')
nDigit[c - '0']++;
else
if(c == ' ' || c == '\n' || c == '\t')
nWhite++;
else
nOther++;
for(i = 0; i < ND; i++)
printf("Dígito %d: %d\n",i,nDigit[i]);
printf("Caracteres separadores: %d\n",nWhite);
printf("Otros caracteres: %d\n",nOther);
return 0;
}
Puntos a Notar
- Declaración de un arreglo: int ndigit[10]. Declara un vector de 10 componentes del tipo entero. En C, todos los arreglos comienzan con el subíndice 0. Como índice, puede utilizarse una constante entera, una variable entera, o una expresión entera. Es importante notar que el lenguaje no realiza chequeos de rango, esto quiere decir que uno puede acceder y/o modificar componentes inexistentes del arreglo, referenciando componentes menores que 0, o mayores que el límite superior. Tener en cuenta que al empezar los índices a numerarse desde 0, un vector como el dado se referencia a través de índices que van desde el 0 al 9.
- Operaciones entre datos del tipo char y tipo int: Los char son convertidos a enteros.Por esta razón, c - '0' da el valor numérico del dígito.
- If anidados. Es la manera de implementar decisiones múltiples. Otra forma de realizar lo mismo esa través de bloque switch.