Está en la página 1de 18

TIPOS DE DATOS: EJERCICIOS

ESTRUCTURAS DE DATOS

RECUERDE * Y &
Si

tengo una variable y


obtener su direccin de memoria antepongo &

Deseo

Si

tengo un puntero y
conocer que almacena, antepongo *

Deseo

Son

operadores que permiten conversin 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 *

ERRORES
Encuentre
Que pta apunte a a

int *pta, *ptb, a, b;

los errores en cada lnea:


pta = *a; ptb = &pta; pta = 8; ptb = ptb + 3; ptb = &NULL; b = 8; *ptb = b; ptb = a + 10; printf(%d, pta + ptb);

Que ptb apunte al mismo sitio que pta Que pta cambie de contenido a 8 Que ptb cambie de contenido aumentando 3 unidades Que ptb apunte a NULL Que b almacene 8 Que ptb apunte a b Que ptb cambie de contenido a a + 10 Imprima la suma de los contenidos de pta y ptb

EL DESTINO DE UN PUNTERO
Un

puntero puede tener dos posibles caminos durante su existencia 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

Puede

apuntar a un espacio de memoria propio. Ejemplo


int *a, b = 10; a = malloc (sizeof (int)); a = b; //a almacena en su propio cajn

RESULTADOS Y ERRORES
Descubra
char *pta, car1; *pta = car1;

los errores

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;

int *ptc, b; b = malloc ( sizeof ( int ) ); *b = 8; ptc = malloc(sizeof(int)); ptc = b+5; free(*ptc); b = *ptc + 10;

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 cdigo anterior para usar matemtica 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 memoria a B para 30 caracteres en B una palabra cualquiera

Asgnele Copie Usando

aritmtica de punteros, modifique todos los caracteres de la cadena para que pase de minus. a mayus. aritmtica de punteros C debe apuntar al carcter de la mitad de la cadena B

Usando

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,


for(i =

otras variables o, i < 3; i++){ 0; Comprar uno o varios cajoncitos propios


A[i] = malloc (sizeof (int) * 3);

} A[i] = NULL;

ARREGLOS DINAMICOS DE PUNTEROS


Al Es

declarar por ejemplo:


**A;

int

un puntero a puntero a entero. Como podramos usar esta variable? Que formas habra 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 funcin que dado un numero, lo modifique invirtiendo sus dgitos Escriba una funcin 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 funcin que dado un arreglo, retorne otro nuevo solo

EJERCICIOS DE REPASO

Escriba una funcin recursiva que dada dos cadenas, permita conocer si ambas son iguales. Escriba una funcin recursiva que busque un elemento en un arreglo Escriba una funcin recursiva que determine si una palabra es o no un palndromo, sin usar string y usando aritmtica de punteros

EJERCICIOS DE REPASO
Defina
Cree

una estructura para representar un termino en un polinomio. Ejemplo: 3x5.


una funcin MultiplicarEscalar que dado un trmino lo modifica multiplicndolo por un valor entero.

Defina

una estructura para representar a un polinomio


Conjunto

de n trminos

Escriba

una funcin Evaluar para que dado un polinomio de n trminos y un valor entero, retorne el valor entero resultante

VOID *
Void

significa el vaco, la nada En lenguaje C puede tener dos usos


Indica

que una funcin no retorna NADA, cuando void es utilizado como tipo de dato de retorno
void

ImprimirEstudiante(Estudiante e);

Como
Un

un puntero genrico, cuando es utilizado como puntero (void *)


puntero genrico es aquel que puede apuntar a cualquier tipo de dato, sin ningn 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

podra declarar un arreglo de void

*? Que utilidad tendra?

También podría gustarte