Arreglos en ANSI C.
Un arreglo en C se declara de la forma:
tipodedato nombre[tamaño-constante];
Un arreglo en C agrupa una o mas instancias de un mismo tipo, dentro de un espacio de memoria direccionable, al referirnos al nombre del arreglo realmente nos referimos a la primera dirección de memoria de este grupo de instancias.
Los tipos de datos pueden ser todos aquellos permitidos por C incluyendo los tipos de datos definidos por el usuario.
El tamaño de los arreglos tamaño-constante, puede ser una expresión, pero la expresión debe de ser evaluada a un valor constante. Por ejemplo:
#define VALOR_MAXIMO 16
int arreglo[VALOR_MAXIMO];
ó
#define VALOR_MAXIMO 16
int arreglo[VALOR_MAXIMO + 1];
Los arreglos comienzan con el elemento de índice 0, así que una definición int arreglo[3]; creara tres elementos de tipo int consecutivos, los cuales pueden ser direccionados de la forma arreglo[0], arreglo[1] y arreglo[2]. Cabe menciona que incluso aunque la declaración diga 3 en el tamaño del arreglo, no existe el elemento arreglo[3] (ver nota 1).
Al igual que cualesquier otra variable, los arreglos globales y estáticos son iniciados a cero (0).
Los arreglos pueden ser iniciados a uno o mas valores entre llaves.
int arreglo[3] = {1};
En el ejemplo anterior todos los elementos del arreglo serán inicializados con el valor uno.
int arreglo[3] = {1,2,3};
En este ejemplo cada elemento tendrá un único valor, para arreglo[0] será el valor 1, para arreglo[1] será 2 y para arreglo[2] será 3.
Los arreglos pueden ser inicializados a una lista de valores como en el ejemplo anterior, pero si el tamaño-constante no está presente, el arreglo será tan grande como la cantidad de elementos contenida en la lista. Por ejemplo:
int arreglo[3] = {1,2,3}; Es exactamente lo mismo que...
int arreglo[] = {1,2,3};
Para incluir arreglos declarados en diferentes archivos o en otros módulos se hace de la siguiente manera.
extern int arreglo[];
No es necesario incluir el tamaño del arreglo (ver nota 2 y 3).
Cadenas constantes.
En C los arreglos de tipo char son usualmente utilizados para representar las cadenas de caracteres, y el elemento final de estas se marca con el byte 0 ó también conocido como carácter NULO (NULL character). Las siguientes definiciones producen arreglos con exactamente los mismos elementos.
int arreglo[] = {'A','B','C','\0'};
int arreglo[] = {"ABC"};
Nota: en las cadenas constantes también es posible denotar un tamaño en el arreglo. Por ejemplo:
int arreglo[3] = {"ABC"};
ó
int arreglo[3] = {'A','B','C'}; Es necesario omitir el carácter NULO.
Arreglos multidimensionales.
Un arreglo multidimencional es simplemente un arreglo donde cada elemento es otro arreglo. Es decir, un arreglo de arreglos.
Un arreglo multidimensional es de la forma arreglo[3][2] pero es almacenado en forma de localidades de memoria consecutivas de la forma
arreglo[0][0] arreglo[0][1] arreglo[1][0] arreglo[1][1] arreglo[2][0] arreglo[2][1]
--------------------
Nota 1: El lenguaje C no restringe accesos fuera de los limites de los arreglos, el acceso en este caso al elemento arreglo[3] no generara ningún error o mensaje de advertencia. El uso de índices fuera del segmento de memoria de los arreglos no es recomendable y sólo debe de ser usado por programadores experimentados.
Nota 2: la referencia al nombre del arreglo es la dirección del primer elemento del arreglo por lo tanto la referencia arreglo es exactamente igual a &arreglo[0]
Nota 3: los arreglos no son apuntadores, son solo la dirección de memoria donde inicia un grupo de elementos de un mismo tipo. Para acceder a los elemento de los arreglos es necesario el uso de corchetes "[ ]", y no puede hacerse de la forma *arreglo, al menos que se involucre "casting". Para entender el uso de los apuntadores o punteros y las diferencias con los arreglos ver el tutorial "Apuntadores en ANSI C."
3 comentarios:
muy buena explicacion muchas gracias, llevo estudiando en la facultad 3 meses eso y alfin entiendo bn el porque se declaran asi los arreglos.
Que bueno que et gusto.. he estado lento con los tutoriales.. pero si hay algun tema que te sea de interes estare mas que contento en hacer un tutorial al respecto..
Saludos, estudia duro.
Publicar un comentario