Está en la página 1de 18

TIPOS DE DATOS:

EJERCICIOS

ESTRUCTURAS DE DATOS
RECUERDE * Y &
 Si tengo una variable y
 Deseo obtener su dirección de memoria antepongo &
 Si tengo un puntero y
 Deseo conocer que almacena, antepongo *
 Son operadores que permiten conversión de datos
int *pta, a=5, b;
pta = &a; //a es de tipo int, y con el & se
obtiene un valor int *
b = *pta; // pta es de tipo int *, y con el *
se obtiene un valor int
ERRORES int *pta, *ptb, a, b;

 Encuentre los errores en cada línea:


Que pta apunte a a pta = *a;
Que ptb apunte al mismo sitio que pta ptb = &pta;
Que pta cambie de contenido a 8 pta = 8;
Que ptb cambie de contenido aumentando 3 unidades ptb = ptb + 3;
Que ptb apunte a NULL ptb = &NULL;
Que b almacene 8 b = 8;
Que ptb apunte a b *ptb = b;
Que ptb cambie de contenido a a + 10 ptb = a + 10;
Imprima la suma de los contenidos de pta y ptb printf(“%d”, pta +
ptb);
EL DESTINO DE UN PUNTERO
 Un puntero puede tener dos posibles caminos durante su
existencia
 Puede “apuntar” a un espacio de memoria de otra variable.
int *a, b = 10;
a = &b; //a no tiene memoria propia, es un “ESPEJO” de b

 Puede “apuntar” a un espacio de memoria propio. Ejemplo


int *a, b = 10;
a = malloc (sizeof (int));
a = b; //a almacena en su propio cajón
de memoria el mismo valor que b
RESULTADOS Y ERRORES
int *ptc, b;
 Descubra los errores b = malloc ( sizeof ( int ) );
*b = 8;
char *pta, ptc = malloc(sizeof(int));
car1; ptc = b+5;
*pta = car1; free(*ptc);
b = *ptc + 10;
 Determine el resultado que almacenan las variables
al final int *ptc, *ptn, b=20;
ptc = &b;
ptn = malloc ( sizeof (int));
*ptn = b + 15;
*ptc = *ptc -1;
ptc = ptn;
*ptc = 2;
ARREGLOS Y PUNTEROS:
RESULTADOS
int AE[4] = {4,1,5,2}, *p;
int i;
p = AE;
for(i = 0; i < 4; i++){
p[i] = p[i] + 3;
}
p = malloc(sizeof(int)*9);
for(i = 0; i < 9; i++){
p[i] = 5;
}
ARITMETICA DE PUNTEROS:
CAMBIAR PROGRAMA
 Cambie el código anterior para usar matemática de
punteros
int AE[4] = {4,1,5,2}, *p;
int i;
p = AE;
for(i = 0; i < 4; i++){
p[i] = p[i] + 3;
}
p = malloc(sizeof(int)*9);
for(i = 0; i < 9; i++){
p[i] = 5;
}
ARITMETICA DE PUNTEROS:
RESUELVA
 Declare un puntero a char llamado B y otro llamado C
 Asígnele memoria a B para 30 caracteres
 Copie en B una palabra cualquiera
 Usando aritmética de punteros, modifique todos los
caracteres de la cadena para que pase de minus. a mayus.
 Usando aritmética de punteros C debe apuntar al carácter
de la mitad de la cadena B
 Imprima C, que sale en pantalla?
ARITMETICA DE PUNTEROS:
RESULTADOS
int B[] = {3,4,1,2,7,12,-4};
float f = 4.234, *ptf;
*(B+3) = *B + 15;
ptf = &f;
*B = (int)(*ptf);
f = *ptf + 20;
*(B + 5) = (int)(*ptf);
ARREGLOS DE PUNTEROS
 Un arreglo puede ser de entero, de real, o de puntero a
enteros, o puntero a real, etc.
 Ejemplo:
 int *A[4];
 A es un conjunto de punteros, cada uno puede apuntar a donde
desee,
 A otras variables o,
 Comprar uno o varios cajoncitos propios
for(i = 0; i < 3; i++){
A[i] = malloc (sizeof (int) * 3);
}
A[i] = NULL;
ARREGLOS DINAMICOS DE
PUNTEROS
 Al declarar por ejemplo:
 int **A;
 Es un puntero a puntero a entero.
 Como podríamos usar esta variable?
 Que formas habría para manipularla y utilizarla?
EJEMPLO
int **A;
A = malloc(sizeof(int *) * 10);
for(i = 0; i <10; i++){
A[i] = malloc(sizeof(int));
*A[i] = 0;
}

int **A;
A = malloc(sizeof(int *) * 10);
for(i = 0; i <10; i++){
A[i] = malloc(sizeof(int)*5);
for(j = 0; j<5; j++){
A[i][j] = 6;
}
}
EJERCICIOS DE REPASO
 Escriba una función que dado un numero, lo
modifique invirtiendo sus dígitos
 Escriba una función que dada una matriz de NxN,
permita conocer si la diagonal esta llena de
valores diferentes de 0 y si ese es el caso,
calcule la suma de los mismos.
 Escriba una función que dado un arreglo, retorne
otro nuevo solo con los elementos pares
EJERCICIOS DE REPASO
 Escriba una función recursiva que dada dos
cadenas, permita conocer si ambas son iguales.
 Escriba una función recursiva que busque un
elemento en un arreglo
 Escriba una función recursiva que determine si
una palabra es o no un palíndromo, sin usar
string y usando aritmética de punteros
EJERCICIOS DE REPASO
 Defina una estructura para representar un termino en un
polinomio. Ejemplo: 3x5.
 Cree una función MultiplicarEscalar que dado un término lo
modifica multiplicándolo por un valor entero.
 Defina una estructura para representar a un polinomio
 Conjunto de n términos
 Escriba una función Evaluar para que dado un polinomio de
n términos y un valor entero, retorne el valor entero
resultante de la evaluación del polinomio.
VOID *
 Void significa el vacío, la nada
 En lenguaje C puede tener dos usos
 Indica que una función no retorna NADA, cuando void
es utilizado como tipo de dato de retorno
 void ImprimirEstudiante(Estudiante e);
 Como un puntero genérico, cuando es utilizado como
puntero (void *)
 Un puntero genérico es aquel que puede apuntar a cualquier
tipo de dato, sin ningún problema
EJEMPLOS DE VOID *
char car1=‘B’, car2;
void *ptg;
ptg = &car1;
car2 = *((char *)ptg) + 3;

char cad[20], car3;


void *ptg;
ptg = cad;
strcpy(cad, “Ejemplo”);
car3 = *((char *)(ptg) + 3) + 5;
PARA PENSAR
 Se podría declarar un arreglo de void *?
 Que utilidad tendría?

También podría gustarte