Академический Документы
Профессиональный Документы
Культура Документы
Taller N. 1
CODIGO: PYS303
Aplicacin a los apuntadores y gestin de memoria dinmica utilizando estructura.
Para estudiantes de: Tercer Semestre de Tecnologa en Desarrollo de Software LAB. TICs ENSAMBLE Y
MANTENIMIENTO
ESPACIO ACADMICO: PYS303 ESTRUCTURAS DE DATOS
CIUDAD Y FECHA: Mocoa Agosto 10 de 2017 VERSIN 01
OBJETIVOS
INTEGRANTES
PARA RECORDAR
http://www.it.uc3m.es/abel/as/DSP/M2/Pointers_es.html
https://www.youtube.com/watch?v=3GO-KckDmiM
https://www.taringa.net/posts/info/17200607/La-complicada-relacion-entre-arreglos-y-punteros.html
http://sopa.dis.ulpgc.es/fso/cpp/intro_c/introc71.htm
BASE CONCEPTUAL
PUNTERO: o apuntador. Es una variable que contiene la direccin de memoria de un dato o de otra variable que
contiene al dato en un arreglo. Dicho de otra forma, un puntero apunta al espacio fsico donde est el dato o la
variable.
Sintaxis:
<tipoDato> *<nombreVariable>;
NOTA: C permite declarar un puntero genrico de tipo void *. Una variable de este tipo almacena un puntero a
cualquier dato. Se recomienda utilizar este tipo de datos slo cuando sea estrictamente necesario.
El tamao de los punteros es siempre el mismo independientemente del dato al que apuntan porque todos
ellos almacenan una direccin de memoria. Para las estructuras de datos, la regla se aplica de forma idntica.
El siguiente ejemplo muestra la definicin de una estructura y la declaracin de una variable de tipo estructura
y otra de tipo puntero a esa estructura:
La variable contact1 es de tipo estructura y ocupa 44 bytes (20 + 20 + 4), mientras que contactPointer es de tipo
puntero y ocupa 4 bytes.
Operadores:
De esta manera,
int a;
int *puntero=&a;
printf("%d",a); Es Igual printf("%d",*puntero);
PASO DE PARMETROS A FUNCIONES: En la mayora de los lenguajes hay dos formas de pasar las variables a
una funcin, por valor o por referencia.
Por valor significa que la funcin (o subrutina) recibe slo una copia del valor que tiene la variable, o sea que
no la puede modificar.
Sintaxis:
Por referencia significa que se pasa la posicin de memoria donde esta guardada la variable, por lo que la
funcin puede saber cunto vale, pero adems puede modificarla de cualquier manera.
Sintaxis:
<nombreSubrutina> (&<nombreParmetro>);
En la subrutina
ARITMTICA DE PUNTEROS
Debido a que un puntero apunta a una direccin de memoria, el lenguaje C permite sumar o restar cantidades
enteras al puntero, para que apunte a una direccin diferente a esto se le conoce como aritmtica de punteros .
int* ptr;
ptr apuntar a cierta direccin de memoria, por lo que tendrn sentido las expresiones ptr+1, ptr+2, etc. La expresin
ptr+k es un puntero que apunta a la direccin de ptr sumndole k veces el espacio ocupado por un elemento del tipo al
que apunta (en este caso un int). EN conclusin, a un puntero se le puede aplicar cualquier clase de operacin de
suma o resta (incluyendo los incrementos y decrementos).
ARREGLOS Y PUNTEROS
Un arreglo es una variable que contiene uno o ms elementos. La direccin del arreglo es la misma que la de su primer
elemento
int *p;
int arreglo[10];
p = arreglo;
Los arreglos pueden manipularse con punteros y viceversa, en el caso del ejemplo, el puntero p apunta a la primera
posicin del bloque de memoria que se separ para almacenar los datos del arreglo.
La diferencia entre punteros y arreglos radica en que el compilador almacena informacin adicional de los arreglos por
lo que los tamaos de p y arreglo seran difentes.
CUESTIONARIO
1. Declare dos variables de tipo entero y asigneles un valor. Imprima los valores de cada variable. Imprima la direccin
en memoria de cada variable.
2. Declare dos variables de tipo entero y asigneles un valor. Implemente una funcin que permita intercambiar los
valores de las dos variables. Esta funcin debe invocarse desde la funcin principal.
Imprima los resultados obtenidos y explique qu ocurre y qu modificacin debe hacerse en la funcin realice el
procedimiento de intercambio de la manera esperada. Qe modificacin debe realizarse en la invocacin de la funcin.
3. Incluya en la funcin intercambio las sentencias necesarias para imprimir las direcciones en memoria de las variables
que se pasan como parmetros.
5. Implemete un algoritmo en el que declare cuatro variables de diferente tipo cada una. Utilizando la funcin
sizeof(<nombreVariable>); imprima el tamao en memoria de la variable. Cree cuatro apuntadores de cuatro tipos
difenerntes e imprima el tamao en memoria de estos.
Nota: Recuerde que, cada vez que se crea una nueva variable, se separa en memoria espacio para esta dependiendo
del tamao necesario para almacenarla segn el tipo. Este espacio en memoria es contguo
6. Declare una variable tipo entero e inicialicela, y un puntero que apunte a la direccin de esta. Imprima el valor de la
variable entera y del puntero. Asigne a la variable entera un nuevo valor utilizando el puntero que se creo para esta.
Imprima el valor de la variable. Cmo se llama el procedimiento efectuado?
7. Declare cuatro variables de diferente tipo cada una. Declare un nico puntero y con este acceda a cada variable e
imprima su valor.
8. Declare dos variables, una tipo char y otra tipo int. Declare un puntero para cada tipo de variable. Incremente cada
puntero en 1 e imprima su la direccin en memoria a la que apunta cada puntero antes y despus del incremento. Qu
sucede y por qu?.
9 Declare un puntero tipo int y un arreglo de enteros de 20 posiciones. Coloque el puntero a apuntar al arreglo e imprima
el tamao del arreglo y del puntero utilizando la funcin sizeof() para el puntero y bsizeof() para el arreglo. Por qu cree
que existe diferencia en los resultados?
10. Cree una cadena de caracteres utilizando un arreglo y coloque un apuntador al unucio del arreglo. Imprima cada uno
de los caracteres accediendo al apuntador como lo hara con un arreglo.