Recordando un poco, en la defición de arreglos dimos esta serie de ejemplos:
int var1[10]; char nombre[50]; float numeros[200]; long double cantidades[25];
Si tomamos el primer caso, estamos declarando un array de 10 variables enteras, cada una de ellas quedará individualizada por el subíndice que sigue al nombre del mismo es decir:
var1[0] , var1[1] , … , hasta var1[9] .
Nótese que la CANTIDAD de elementos es 10, pero su numeración va de 0 a 9 , y no de 1 a 10 . En resumen un array de N elementos tiene subíndices válidos entre 0 y N - 1. Cualquier otro número usado como subíndice, traerá datos de otras zonas de memoria, cuyo contenido es impredecible. Se puede referenciar a cada elemento, en forma individual, tal como se ha hecho con las variables anteriormente, por ejemplo:
var1[5] = 40 ; contador = var1[3] + 7 ; if(var1[0] >> = 37) ..................
También es posible utilizar como subíndice expresiones aritméticas, valores enteros retornados por funciones, entre otros. Así podríamos escribir:
printf(" %d " , var1[ ++i] ) ; var1[8] = var1[ i + j ] ; ............................... int funcion(void) ; var1[0] = var1[funcion() ] * 15 ;
Por supuesto los subíndices resultantes de las operaciones tienen que estar acotados a aquellos para los que el array fue declarado y ser enteros. Inicialización de Arreglos: La inicialización de los arrays sigue las mismas reglas que vimos para los otros tipos de variables, es decir: Si se declaran como globales (afuera del cuerpo de todas las funciones) cada uno de sus elementos será automáticamente inicializado a cero. Si en cambio, su declaración es local a una función, no se realiza ninguna inicialización, quedando a cargo del programa cargar los valores de inicio. La inicialización de un array local, puede realizarse en su declaración, dando una lista de valores iníciales:
int numero[8] = { 4 , 7 , 0 , 0 , 0 , 9 , 8 , 7 } ;
Obsérvese que la lista está delimitada por llaves. Otra posibilidad, sólo válida cuando se inicializan todos los elementos del array, es escribir:
int numero[] = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , } ;
Donde se obvia la declaración de la cantidad de elementos, ya que está implícita en la lista de valores constantes.
También se puede inicializar parcialmente un array, por ejemplo:
int numero[10] = { 1 , 1 , 1 } ;
En éste caso los tres primeros elementos del mismo valdrán 1, y los restantes cero en el caso que la declaración sea global, ó cualquier valor impredecible en el caso de que sea local.