Anda di halaman 1dari 2

Cuestiones generales Un array es un tipo de estructura de datos que consta de un nmero fijo de elementos del mismo tipo.

En una mquina, dichos elementos se almacenan en posiciones contiguas de memoria. Estos elementos pueden ser variables o estructuras. Para definirlos se utiliza la expresin: tipo_de_elemento nombre_del_array[nmero_de_elementos_del_array]; int mapa[100]; Cada uno de los elementos de los que consta el array tiene asignado un nmero (ndice). El primer elemento tiene ndice 0 y el ltimo tiene ndice nmero_de_elementos_del_array-1. Para acceder a ese elemento se pone el nombre del array con el ndice entre corchetes: nombre_del_array[ndice] mapa[5] Los elementos no tienen por qu estar determinados por un solo ndice, pueden estarlo por dos (por ejemplo, fila y columna), por tres (p.e. las tres coordenadas en el espacio), o incluso por ms. A estos arrays definidos por ms de un ndice se le llaman arrays multidimensionales o matrices, y se definen: tipo_de_elemento nombre_del_array[nmero1] [nmero2]... [nmeroN]; int mapa[100][50][399]; Y para acceder a un elemento de ndices i1,i2,...,iN, la expresin es similar: nombre_del_array[i1][i2]...[iN] mapa[34][2][0] Hay que tener cuidado con no utilizar un ndice fuera de los lmites, porque dar resultados inesperados (tales como cambio del valor de otras variables o finalizacin del programa, con error "invalid memory reference"). Manejo de arrays Para manejar un array, siempre hay que manejar por separado sus elementos, esto es, NO se pueden utilizar operaciones tales como dar valores a un array (esperando que todos los elementos tomen ese valor). Tambin hay que tener en cuenta de que al definir un array, al igual que con una variable normal, los elementos del array no estn inicializados. Para ello, hay que dar valores uno a uno a todos los elementos. Para arrays unidimensionales, se utiliza un for: for(i=0;i<N;i++) array[i]=0; y para arrays multidimensionales se hara as: for(i1=0;i1<N1;i1++) for(i2=0;i2<N2;i2++) ... for(iN=0;iN<NN;iN++) array1[i1][i2]...[iN]=0; Hay una funcin que, en determinadas ocasiones, es bastante til para agilizar esta inicializacin, pero que puede ser peligrosa si se usa sin cuidado: memset (incluida en string.h). Lo que hace esta funcin es dar, byte a byte, un valor determinado a todos los elementos: memset(array,num,tamao); donde array es el nombre del array (o la direccin del primer elemento), num es el valor con el que se quiere inicializar los elementos y tamao es el tamao del array, definido como el nmero de

elementos por el tamao en bytes de cada elemento. Si el tamao de cada elemento del array es 1 byte, no hay problema, pero si son ms, la funcin da el valor num a cada byte de cada elemento, con lo que la salida de un programa del tipo: #include<stdio.h> #include<string.h> void main() { short mapa[10]; memset(mapa,1,10*sizeof(short)); printf("%d",mapa[0]); } no es 1 (0000000000000001 en base 2), como cabra esperar, sino 257 (0000000100000001 en base 2). Tambin hay otra funcin que facilita el proceso de copiar un array en otro: memcpy (incluido tambin en string.h). Esta funcin copia byte a byte un array en otro. Arrays dinmicos Si al iniciar un programa no se sabe el nmero de elementos del que va a constar el array, o no se quiere poner un lmite predetermiado, lo que hay que hacer es definir el array dinmicamente. Para hacer esto, primero se define un puntero, que sealar la direccin de memoria del primer elemento del array: tipo_de_elemento *nombre_de_array; y luego se utiliza la funcin malloc (contenida en stdlib.h) para reservar memoria: nombre_de_array=(tipo_de_elemento *)malloc(tamao); donde tamao es el nmero de elementos del array por el tamao en bytes de cada elemento. La funcin malloc devuelve un puntero void, que indica la posicin del primer elemento. Antes de asignarlo a nuestro puntero, hay que convertir el puntero que devuelve el malloc al tipo de nuestro puntero (ya que no se pueden igualar punteros de distintos tipos). Para arrays bidimensionales, hay que hacerlo dimensin a dimensin; primero se define un puntero de punteros: int **mapa; Luego se reserva memoria para los punteros: mapa=(int **)malloc(sizeof(int *)*N1); y, por ltimo, para cada puntero se reserva memoria para los elementos: for(i1=0;i1<N1;i1++) mapa[i1]=(int *)malloc(sizeof(int)*N2); Ya se puede utilizar el array normalmente. Para arrays de ms de dos dimensiones, se hace de forma similar.

Anda mungkin juga menyukai