Está en la página 1de 21

Tema 10: Arreglos estáticos en C

M. en C. Edgardo Adrián Franco Martínez 1


http://www.eafranco.com
edfrancom@ipn.mx
@edfrancom edgardoadrianfrancom
Estructuras de datos (Prof. Edgardo A. Franco)
Contenido

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Introducción
• Arreglos unidimensionales
• Lectura-escritura de elementos en arreglos
unidimensionales
• Inicialización de un arreglo
• Arreglos multidimensionales
• Inicialización de arreglos multidimensionales
• Lectura-escritura de elementos de arreglos
multidimensionales
• Envió de un arreglo a funciones en C (Paso de referencia)
• Tamaño de un arreglo 2
• Función Sizeof
Introducción

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Un arreglo estático es una colección finita y
constante (que no cambia su tamaño) de elementos
del mismo tipo.

• Un arreglo también es conocido como vector, matriz


o array.

• Se pueden crear arreglos de cualquier tipo de dato


en C, es decir, tipos de dato simple, estructurado,
archivos e incluso de apuntadores.
3
Arreglos unidimensionales

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Se conocen dos tipos de arreglos: los unidimensionales
y los multidimensionales. Y al igual que otra variable
primero se debe declarar antes de utilizarse.

• Sintaxis para declarar un arreglo unidimensional:


<tipo_de_dato> identificador[tam_arreglo];

• Cuando se declara un arreglo unidimensional o


multidimensional, se debe indicar el tamaño de dicho
arreglo y este permanecerá constante durante el ciclo de
vida del programa o de la función, es decir, no podrá
cambiar su tamaño de manera dinámica. (Arreglos 4
estáticos)
Por ejemplo:

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
int arreglo[ 10 ];

• Esta declaración hace que el compilador le indique


al sistema operativo que reserve espacio suficiente
para almacenar 10 valores enteros.

• En estos casos, cuando se declara un arreglo el S.O.


le asigna a dicho arreglo una porción consecutiva de
memoria que es múltiplo del tamaño del tipo de
dato con el que se declaro el arreglo.
5
• int arreglo[ 10 ];

10 Arreglos estáticos en C
6

Algoritmia y programación estructurada


Prof. Edgardo Adrián Franco Martínez
Lectura-escritura de elementos en
arreglos unidimensionales

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Cada ítem del arreglo se le denomina elemento del
arreglo.

• Todos los elementos que constituyen un arreglo se


numeran consecutivamente comenzando en 0 hasta
n-1 donde:
• 0: es el primer elemento del arreglo,
• n-1: es el ultimo elemento del arreglo y
• n: es el tamaño total del arreglo.
7
• A los valores de 0 a n-1 se les denomina índices o
subíndices del arreglo, es decir, un índice o

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
subíndice nos ubica en una posición determinada
dentro del arreglo y nos permite tener acceso
directo al elemento de ese índice, para obtener su
valor o para modificarlo,

Tamaño total del arreglo


• Por ejemplo:
Índice o subíndice del
arreglo
int arreglo[30];
int dato; Se obtiene el valor del
dato = arreglo[10]; elemento (10 + 1)
arreglo[25] = 2344;
Se modifica el valor del 8
elemento (25 + 1)
Inicialización de un arreglo

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Al igual que una variable local, un arreglo puede estar
previamente inicializado antes de usarlo, caso contrario el
arreglo contendrá datos basura.

• Existen diferentes formas de inicializar un arreglo:


1. int numeros[6] = { 10,20,30,40,50,60 };
2. int numeros[] = { 10,20,30 };
3. char cad[] = {‘h’,‘o’,‘l’,‘a’,‘\0’};
4. char s[] = “hola";

• Cada elemento dentro de las llaves corresponde a un


elemento que se almacena en una localidad del arreglo.

• Un caso especial es el de las comillas dobles ʺcadenasʺ, este


tipo de inicialización aplica solamente para arreglos de
caracteres y también significa que se está inicializando dicho 9
arreglo.
• Ejemplos

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Inicializar un arreglo de números aleatorios
int i;
for( i = 0, i < 6, i++ )
{
numeros[i] = rand();
}

• Inicializar un arreglo de con el abecedario


char i;
int h = 0;
for( i = ‘a’, i <= ‘z’, i++ )
{
letras[h] = i;
h++; 10
}
Arreglos multidimensionales

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Los arreglos multidimensionales son los que tienen
más de una dimensión, los más usuales son los de
dos dimensiones que también son conocidos como
tablas o matrices.

11
• Una arreglo de dos dimensiones tienen 2 índices
que nos ayudan a ubicar un elemento dentro del

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
arreglo.

12
La sintaxis para la declaración de un arreglo de dos

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
dimensiones seria:

<tipo_dato> identificador [tam_filas][tam_columnas];

• Por ejemplo:
int datos[3][3];
• Esta línea de código declara un arreglo en dos
dimensiones de 3 X 3 elementos, es decir, este arreglo
contendrá en su interior 9 elementos de tipo entero.

13
Acceso arreglos multidimensionales

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Para acceder a alguno de sus elementos se utilizan los
dos índices, es decir:
0 1 2
datos[0][2] = 12;
0 12
datos[2][0] = 0;
datos[2][2] = 30; 1

Los arreglos van 2 0 30


de 0 hasta n-1, datos es un arreglo
de 3 X 3 entonces datos[2][2] hace
referencia al ultimo elemento del arreglo

• Un arreglo en dos dimensiones en realidad es un arreglo


de arreglos unidimensionales, es decir, cada elemento
del un arreglo no es un valor entero, sino que cada 14
elemento es un arreglo.
• Es decir:

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
int datos[3][3];
Es un arreglo que contiene 3 arreglos de tres
elementos cada uno.

datos[0]
datos[1]
datos[2]

datos[2][0] datos[2][2]

datos[2][1]
15
Inicialización de arreglos multidimensionales

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Existen varia formas de inicializar un arreglo de dos
dimensiones:
a) int datos[3][3] = { 1,2,3,4,5,6,7,8,9};
b) int datos[3][3] = { {1,2,3},{4,5,6},{7,8,9}};
c) int datos[3][3] = { {1,2,3},
{4,5,6},
{7,8,9}};

d) o finalmente con un ciclo anidado:

for ( i = 0; i < 3; i++){ //i manipulara las filas


for( j = 0; j < 3; j++){ //j las columnas
datos[i][j] = rand()%30; //Se delimita los valores
} //entre 0 y 30
} 16
Todas estas inicializaciones tienen el mismo efecto.
Lectura-escritura de elementos de arreglos
multidimensionales

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Para escribir o leer un elemento de un arreglo
bidimensional siempre se va a requerir utilizar los
dos índices con los cuales se declaro el arreglo.

• Para escribir en uno de ellos, obteniendo el valor


desde consola sería:

int datos[3][3];
printf( "Escribe un dato entero: \n" );
scanf( "%d", &datos[1][2] );
printf( El dato capturado fue: %d , &datos[1][2] ); 17
Mandar por referencia a una función un arreglo
unidimensional o de dos dimensiones

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Para mandar por referencia un arreglo a una función se
debe entender que el nombre del arreglo, es decir, el
identificador que se le coloco al arreglo es un apuntador,
por lo tanto para mandar un arreglo a una función se
hace de la siguiente forma:
int arregloInt[10];
funcion( arregloInt );
. Se manda el nombre arregloInt
que es un apuntador que
.
contiene la dirección del primer
. elemento dentro del arreglo.

int funcion( int *ptr ){


La referencia del arregloInt se
ptr[0] = 123;
debe recibir con una variable
ptr[1] = 7; apuntador del mismo tipo que fue 18
} declarado el arreglo.
Hacen ya referencia
directamente a los
elementos de arregloInt
Mandar por referencia a una función un arreglo
unidimensional o de dos dimensiones

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Para un arreglo de dos dimensiones sucede lo mismo,
solo hay que tomar en cuenta que el nombre de arreglo
multidimensional es un apuntador a apuntadores, es
decir, el apuntador a apuntadores quedara definido
dependiendo de la dimensión del arreglo, así para un
arreglo de dos dimensiones:
int arreglo2D[5][10];
funcion(arreglo2D);
Se recibe con un apuntador a cadena
.
ya que se trata de un arreglo de 2D
.
y su nombre seria un apuntador a
. una cadena

int funcion2( int (*ptr)[10] ){


ptr[5][8] = 1;
Hacen ya referencia 19
ptr[9][6] = 7542;
} directamente a los
elementos de arreglo2D
Tamaño en bytes de un arreglo

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• Para obtener saber el tamaño de un arreglo, se
puede utilizar la función sizeof(), esta función
nos devolverá el numero de bytes reservados para el
arreglo completo.

• Por ejemplo:
int arreglo[ 10 ];
int tamanio;
tamanio = sizeof( arreglo );
20
Función Sizeof ( )

Prof. Edgardo Adrián Franco Martínez


10 Arreglos estáticos en C
Algoritmia y programación estructurada
• sizeof() también sirve para darnos el tamaño de un
tipo de dato en especifico o el tamaño de un elemento
dentro del arreglo.
• Por ejemplo:
int tamanio;
double a = 3.1455; float b = 3.084;
char c = ‘e’;
tamanio = sizeof( a );
tamanio = sizeof( b );
tamanio = sizeof( c );
tamanio = sizeof( tamanio );
21
tamanio = sizeof( arreglo[1] );

También podría gustarte