CATEGORII DOCUMENTE |
Bulgara | Ceha slovaca | Croata | Engleza | Estona | Finlandeza | Franceza |
Germana | Italiana | Letona | Lituaniana | Maghiara | Olandeza | Poloneza |
Sarba | Slovena | Spaniola | Suedeza | Turca | Ucraineana |
DOCUMENTE SIMILARE |
|
ARRAYS EN C
1.- INTRODUCCIÓN
Se utilizan para almacenar múltiples datos que tienen características comunes, es decir, los datos individuales deben ser del mismo tipo y con el mismo tipo de almacenamiento.
Cada elemento del array es referido especificando el nombre del array seguido por uno o más índices, con cada índice encerrado entre corchetes. Así, en un array x de n elementos los elementos del array son x[0], x[1], x[2], , x[n-1].
El número de índices determina la dimensión del array:
x [i] se refiere a un elemento de un array unidimensional.
y [i] [j] se refiere a un elemento de una array bidimensional.
z [i] [j] [k] se refiere a un elemento de un array tridimensional, etc.
2.- DEFINICIÓN DE UN ARRAY
En general, un array unidimensional puede expresarse como:
tipo_almacenamiento tipo_dato array[expresión];
donde tipo_almacenamiento se refiere al tipo de almacenamiento del array, tipo_dato es el tipo de dato de los elementos, array es el nombre del array y expresión es una expresión entera positiva que indica el número de elementos del array. El tipo_almacenamiento es opcional; los valores por defecto son automático (local) para arrays definidos dentro de una función o bloque, y externo para arrays definidos fuera de una función.
Ej: int x[TAMAÑO]; /* existiendo una cte. simbólica: #define TAMAÑO 100 */
char texto[80];
static char mensaje[25];
static float n[12];
Los arrays automáticos no pueden ser inicializados. La definición de arrays estáticos y externos puede incluir la asignación de valores iniciales. Estos valores iniciales deben aparecer en el orden en que serán asignados a los elementos individuales del array, encerrados entre llaves y separados por comas. La forma general es:
tipo_almacenamiento tipo_dato array[expresión] = ;
Ej: int digitos[10]=;
static float x[6]=;
char color[3]=;
Todos los elementos del array que no tienen asignados valores iniciales explícitos serán puestos automáticamente a 0.
Ej: int digitos[10]=;
digitos[0]=3; digitos[1]=3; digitos[2]=3; digitos[3]= =digitos[9]=0
static float x[6]=;
x[0]=-0.3; x[1]=0; x[2]=0.25; x[3]=x[4]=x[5]=0;
El tamaÑo de un array no necesita ser especificado explícitamente cuando se incluyen los valores iniciales como parte de la definición de un array. Con un array numérico, el tamaÑo del array será fijado automáticamente igual que el número de valores incluidos en la definición.
Ej: int digitos[]=; /* array de 6 elementos */
static float[]=; /* array estático de 4 elementos */
Cuando se asigna una cadena constante a un array estático o externo como parte de la definición, el tamaÑo del array normalmente se omite. Este tamaÑo será asignado automáticamente teniendo en cuenta el espacio ocupado por el carácter nulo 0, que se aÑade al final de cada cadena de forma automática.
Ej: char color[3]='RED'; mal
char color[]='RED'; equivale a char color[4]='RED'; bien
Si el programa requiere la declaración de un array unidimensional (porque está definido en otra parte del programa), la declaración se escribe igual que la definición con dos excepciones:
Los corchetes pueden estar vacíos ya que el tamaÑo puede haberse establecido en la definición. Esto es lo normal.
No se pueden incluir valores iniciales en la declaración.
Ej: Primer archivo
int c[]=; /*definición de un array externo */
char mensaje[]='HOLA'; /*definición de un array externo*/
extern void funcl(void); /*declaración de función externa*/
main()
Segundo archivo
extern int c[]; /*declaración de un array externo */
extern char mensaje[]; /*declaración de un array externo*/
extern void funcl(void); /*definición de función externa*/
3.- PROCESAMIENTO DE UN ARRAY
En C no se permiten operaciones sobre arrays completos, es decir, las operaciones de asignación, comparación, etc, sobre arrays deben realizarse elemento por elemento. Esto suele hacerse dentro de un bucle donde el número de pasos del bucle es igual al número de elementos del array.
4.- PASO DE ARRAYS A FUNCIONES
El nombre de un array ( sin corchetes ni índices) se puede usar como argumento de una función, permitiendo que el array completo sea pasado a la función.
En la función que tiene un array como argumento, se declara el array sin indicar el tamaÑo (corchetes vacíos).
Ej: main( )
float media(x) /*definición de función*/ (2)
float x[]; /*declaración de argumento formal (array)*/
(1) Podría ponerse: float media(float[]); o bien float media(float x[]);
(2) Podría ponerse: float media(float x[]);
Los argumentos son pasados a una función por valor cuando los argumentos son variables ordinarias. En realidad, se trabaja sobre una copia de la variable y las posibles modificaciones no se mantienen después de salir de la función.
Sin embargo, cuando se pasa un array a una función, los valores de los elementos del array no son pasados a la función. En su lugar, el nombre del array se interpreta como la dirección del primer elemento del array. Los argumentos pasados de esta manera se dice que son pasados por referencia. En este caso, cuando se altera un elemento del array dentro de la función, esta alteración permanece después de salir de la misma.
Debe indicarse que la sentencia return no puede ser usada para devolver un array (ya que sólo puede devolver expresiones unievaluadas). Por tanto, si queremos retornar los elementos de un array a la porción llamante del programa, el array debe ser definido como un array externo (global) o debe ser pasado a la función como un parámetro formal.
5.- ARRAYS MULTIDIMENSIONALES
Se definen igual que los unidimensionales excepto que requieren un par separado de corchetes para cada índice. Un array n-dimensional puede escribirse como:
tipo_almacenamiento tipo_dato array[expresión1] [expresión2] [expresiónN];
Si un array unidimensional de n elementos puede ser visto como una lista de valores, un array bidimensional m * n ( x[m] [n] ) puede ser visto como una tabla de valores de m filas y n columnas:
col 1 col 2 col 3 col (n-1) col n
fila 1
x[0][0] x[0][1] x[0][2] x[0][n-2] x[0][n-1]
fila 2
x[1][0] x[1][1] x[1][2] x[1][n-2] x[1][n-1]
fila m
x[m-1][0] x[m-1][1] x[m-1][2] x[m-1][n-2] x[m-1][n-1]
Ej: static float tabla[50] [50];
char pagina[24] [80];
Los arrays multidimensionales estáticos y externos pueden inicializarse en su definición. Los valores son asignados teniendo en cuenta que el último índice (más a la derecha) es el que se incrementa más rápidamente, y el primer índice (más a la izquierda) el que se incrementa más lentamente.
Ej: int x [3] [4] = ;
x[0][0]=1 x[0][1]=2 x[0][2]=3 x[0][3]=4
x[1][0]=5 x[1][1]=6 x[1][2]=7 x[1][3]=8
x[2][0]=9 x[2][1]=10 x[2][2]=11 x[2][3]=12
El orden natural en el que los valores iniciales son asignados se puede variar formando grupos de valores encerrados entre llaves. Los valores dentro de cada grupo se asignan a los elementos del array cuyo último índice varíe más rápidamente. Si hay menos valores en un grupo que elementos, los que quedan se ponen a cero. Si hay más valores que elementos se produce un error.
Ej: int x [3] [4] = , /*fila 1*/
, /*fila 2*/
/*fila 3*/
/*equivale a la asignación anterior*/
int x [3] [4] = , /*fila 1*/
, /*fila 2*/
/*fila 3*/
};
x[0][0]=1 x[0][1]=2 x[0][2]=3 x[0][3]=0
x[1][0]=4 x[1][1]=5 x[1][2]=6 x[1][3]=0
x[2][0]=7 x[2][1]=8 x[2][2]=9 x[2][3]=0
int t[10][20][30]=, /*fila 1*/
, /*fila 2*/
/*fila 3*/
},
, /*fila 1*/
, /*fila 2*/
/*fila 3*/
}
};
t[0][0][0]=1 t[0][0][1]=2 t[0][0][2]=3 t[0][0][3]=4
t[0][1][0]=5 t[0][1][1]=6 t[0][1][2]=7 t[0][1][3]=8
t[0][2][0]=9 t[0][2][1]=10 t[0][2][2]=11 t[0][2][3]=12
t[1][0][0]=21 t[1][0][1]=22 t[1][0][2]=23 t[1][0][3]=24
t[1][1][0]=25 t[1][1][1]=26 t[1][1][2]=27 t[1][1][3]=28
t[1][2][0]=29 t[1][2][1]=30 t[1][2][2]=31 t[1][2][3]=32
El resto de elementos del array t tendrán asignados ceros.
Los arrays multidimensionales se procesan, como los unidimensionales, elemento por elemento. Sin embargo, cuando se pasan arrays multidimensionales a una función hay que tener cuidado ya que todos los índices deben llevar el tamaÑo excepto el primero. Esto es válido tanto en la declaración de argumentos formales dentro de cada función como en la declaración de prototipos.
Ej: #define FIL 20
#define COL 30
main()
void suma (int a[][COL], int b[][COL], c[][COL])
/* suma los elementos de a y b y los almacena en c */
6.- ARRAYS Y CADENAS DE CARACTERES
Ya se ha visto que una cadena de caracteres puede ser representada por una array unidimensional de caracteres. Cada carácter de la cadena será almacenado en un elemento del array. El último elemento del array debe ser obligatoriamente el carácter nulo 0.
Existen muchas funciones de biblioteca en C para el manejo de cadenas de caracteres. Algunas procesan las cadenas como entidades completas( strcpy(s1,s2) copia la cadena s2 en s1) y otras permiten operaciones sobre caracteres individuales dentro de una cadena.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 687
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved