Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Mecánica y Eléctrica
Unidad Culhuacán
1CM45
Fundamentos de Programación
Semestre 2023-2
ESTRUCTURAS DE DATOS
Por ejemplo, para declarar un arreglo de enteros llamado a con diez elementos se
hace de la siguiente forma:
int a[10];
En C, todos los arreglos usan cero como índice para el primer elemento. Por tanto,
el ejemplo anterior declara un arreglo de enteros con diez elementos desde a[0]
hasta a[9].
int b[50][50];
Observar que para declarar cada dimensión lleva sus propios paréntesis cuadrados.
Para acceder los elementos se procede de forma similar al ejemplo del arreglo
unidimensional, esto es:
Por ejemplo:
//Crear un arreglo
float grupo[10];
int i;
Los arreglos nos sirven para almacenar datos. Si deseamos guardar datos en un
arreglo podemos escribir la ubicación exacta donde deseamos almacenarlos.
Donde:
-Nombre: Es el nombre de la variable de nuestro arreglo
-Numero: Es un valor numérico que indicará el tamaño de nuestro arreglo (por
ejemplo 5,10 o 20)
-Datos a guardar: Es el dato que queremos que sea guardado en nuestro arreglo.
Un array en C puede tener una, dos o más dimensiones. Por ejemplo, un array de
dos dimensiones también denominado matriz, es interpretado como un array
(unidimensional) de dimensión "f" (número de filas), donde cada componente es un
array (unidimensional) de dimensión "c" (número de columnas). Un array de dos
dimensiones, contiene, pues, "f*c" componentes.
El formato para declarar un array multidimensionales:
int nombre[f][c]…;
dónde: f,c...>= 1;
nombre[i][j];
{ 1,2,3,4},
{ 2,3,4,5}};
Sin embargo, es mucho más conveniente anidar dos ciclos para inicializar un array
de dos dimensiones:
A[i][j] = i+j;}
int arreglo[10][10];
float matriz[10][10];
También podemos utilizar constantes para definir la dimensión del arreglo de dos
dimensiones:
int arreglo[N][N];
Inicialización
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
4.3 Apuntadores:
int x = 25; cout << "La direcci´on de x es: " << &x << endl;
Indireccion de apuntadores:
int edad;
int ∗ p edad;
p edad = &edad
p edad = 50;
Si se desea imprimir el valor de edad, se puede hacer de dos formas distintas, una
imprimiendo directamente el valor de edad y la otra des referenciando al apuntador
edad como se muestra a continuación, respectivamente según el caso.
printf(“%d”, edad);
printf(“%d”, ∗p edad);
C´odigo C y C++
float *p;
cout << "El valor apuntado por p es: " << *p << endl; // Incorrecto
*p = 3.5; // Incorrecto
. Ejemplo:
Código C y C++
int *p, y;
void func()
int x = 40;
p = &x;
y = *p; // Correcto
*p = 23; // Correcto
void main()
func();
y = *p; // Incorrecto
*p = 25; // Incorrecto
C´odigo C y C++
#define NULL 0
Apuntadores a apuntadores:
Dado que un apuntador es una variable que apunta a otra, fácilmente se puede
deducir que pueden existir apuntadores a apuntadores, y a su vez los segundos
pueden apuntar a apuntadores, y así sucesivamente. Estos apuntadores se
declaran colocando tantos asteriscos (‘*’) como sea necesario. Ejemplo:
char c = ’z’;
int x = 5, y = 7;
*p = 3; // Esto es valido
También es posible declarar apuntadores a datos constantes. Esto hace que no sea
posible modificar el valor al que apunta el apuntador. Ejemplo:
int x = 5, y = 7;
const int *p = &x; // Declaración e inicialización del apuntador a constante
y = 3; // Esto es valido
int *lista_ptr;
Ejemplos:
char cad[15];
char *q;
strcpy(cad, "Programando");
cout << q;
double *p = &x[1],
*q = &x[4];
int n;
n = q - p; // a ’n’ se le asigna 3
r = a + b;
void main()
int x;
suma(7, 5, x);
C´odigo C y C++
*r = a + b;
void main()
int x;
suma(7, 5, &x);
Nótese que en ambos casos se utiliza el operador ‘&’ para cosas distintas. El
operador ‘&’ tiene dos significados como operador unario: señalación de parámetro
por referencia y operador de referenciación.
Dirección
Operador &
int i;
int *ptr;
...
ptr = &i;
Indirección
Operador *
char c;
char *ptr;
ptr = &c;
Asignación
Operador =
A un puntero se le puede asignar una dirección de memoria concreta, la dirección
de una variable o el contenido de otro puntero.
int *ptr;
...
ptr = 0x1F3CE00A;
...
ptr = NULL;
char c;
char *ptr;
...
ptr = &c;
char c;
char *ptr1;
char *ptr2;
ptr1 = &c;
ptr2 = ptr1;
Como todas las variables, los punteros también contienen “basura” cuando se
declaran, por lo que es una buena costumbre inicializarlos con NULL.
Ejemplo:
int main ()
int y = 5;
int z = 3;
int *nptr;
int *mptr;
nptr = &y;
z = *nptr;
*nptr = 7;
mptr = nptr;
mptr = *z;
*mptr = *nptr;
y = (*nptr) + 1;
return 0;
}
Bibliografía
(1997), L. Y. (s.f.). “Estructura de Datos con C y C++”. Segunda Edición. Prentice
Hall.
Morales, J. I. (Toluca, Méx. Agosto 2015). Tema 1.2 Arreglos: Vectores, matrices,.
UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO.