Sie sind auf Seite 1von 14

Universidad Nacional Autónoma

de México
“Facultad de ingeniería - Ingeniería eléctrica
electrónica”
Laboratorio de Estructura de Datos y Algoritmos I

Practica 2:
“Aplicaciones de apuntadores”
Alumna:
Profesora:
Alvarado González Alicia Montserrat
Grupo: 1227

2° Semestre
Fecha de entrega 24/feb/2016

1
OBJETIVO

Utilizar apuntadores en lenguaje C para acceder a las localidades de memoria tanto datos
primitivos como de arreglos.

MARCO TEORICO

Un apuntador es una variable cuyo es la dirección de memoria de otra variable. Un apuntador


apunta a la variable cuyo valor se almacena a partir de la dirección de memoria que contiene el
apuntador. Cuentan con una declaración propia

Para declarar un apuntador se especifica el tipo de dato al que apunta. El operador ‘*’ y el nombre
el apuntador, la sintaxis es:

<tipo de dato apuntado> *<identificador del apuntador>

Los apuntadores se enlazan a tipos de datos específicos, esto quiere decir que un apuntador solo
se le pueden asignar direcciones de variables del tipo especificado en la declaración del
apuntador.

Un apuntador apunta a una variable que se encuentra almacenada en alguna parte de la memoria
física.

Los apuntadores disponen de dos operadores: el operador unario o monadico, y el operador de


indireccion o desreferencia ‘*’

 Un operador de dirección &: devuelve la dirección de memoria de una variable que le sigue;
operador unario que regresa la dirección de su operador. Ejemplo:

Main()
{
Int y;
Int *yp;

Y=5;
Yp=&y;
}

 Un operador de indirección o de desrefencia: devuelve el contenido de un objeto apuntado


por un apuntador.
Main()
{
Int x, y;
Int *py;
Y=5;

2
*py=y;
X=*py + 5;
X=*py+5;
Printf(“%d %d nn”,*py,x);
}

La utilidad de los apuntadores radica en que permiten a un programa ser más potente, dinámico y
flexible, su uso le da al lenguaje c su potencia y la popularidad que ha adquirido, debido a que
permite el acceso de memoria de manera más eficiente, sin embargo, una mala referencia a dicha
memoria provocara en el programa una salida.

Trabajar con apuntadores implica el manejo de direcciones de memoria en la cual residen los datos.

Cuando se declara un apuntador, el compilador no lo inicializa, es decir, tendrá un valor aleatorio ,


esto condiciona a que si se le asigna la dirección de una variable, el compilador no sepa a que tipo
de dato se quiera apuntar.

Existen dos tipos de apuntadores especiales

 Apuntador null

Un apuntador nulo no apunta a ninguna localidad de memoria, este es muy útil cuando se requiere
indicar al programa que valide cuando el apuntador no está apuntando a nada, es útil para
propósitos de comparación en una estructura condicional.

 Apuntador void.

Los apuntadores void son apuntadores que apuntan a cualquier tipo de dato, es decir, no se inicializa
con un tipo de dato especifico, también son llamados apuntadores genéricos. También permite a
una función especificar un parámetro de entrada para recibir cualquier tipo de apuntador sin que
produzca un error de tipos.

Tambien un apuntador es una variable que puede modifica el valor al que apunta, se puede realizar
ciertas operaciones aritméticas con ellas, a un apuntador se le puede sumar o restar un entero n. se
le puede aplicar el operador ++ y --, eso hace que obtenga la dirección del siguiente o anterior
elemento en la memoria de datos.

MATERIALES Y METODOS

1. En el laboratorio de estructura de datos y algoritmos la maestra dio a conocer la practica


2. Nos dio 5 problemas de apuntadores
3. Debíamos de terminar al menos los dos primeros ejercicios en la clase.
4. El primer ejercicio fue explicado en la clase para una mejor comprensión.
5. Se trabajaron 4 ejercicios que se hicieron en dev c++

3
RESULTADOS

Problemas:

1. Escribir una función que reciba dos arreglos de cadenas. El primero será una palabra y el segundo
una oración. La salida será el número de veces que ocurre la palabra en la oración. Usando
apuntadores para recorrer los arreglos y comparando carácter por carácter.

4
2. Crear dos arreglos, uno de tipo entero y otro de tipo cadena. Primero habrá que recorrer cada
elemento de ambos arreglos con notación de arreglo e imprimir cada elemento en pantalla.
Segundo crear dos apuntadores donde el primero apuntará al arreglo entero y el segundo al arreglo
cadena, los apuntadores deberán de recorrer cada uno de los elementos de los arreglos con
notación de apuntadores y deberán imprimirlos en pantalla.

5
6
7
3. Escribir un programa que genere aleatoriamente N números enteros y los almacene en un arreglo.
Implementar una función que reciba tres arreglos, donde el primero sea el arreglo original, el

8
segundo será un arreglo donde se almacenarán solo los números pares y el tercero un arreglo donde
se colocarán los números impares. Esta función deberá de copiar los números pares del arreglo
original al arreglo de números pares y copiar los números impares del arreglo original al arreglo de
números impares:

void Separa(int *original, int *pares, int *impares, int maximo);

Consideraciones:

• El recorrido de los arreglos será exclusivamente con apuntadores.


• La función principal genera el arreglo original.
• Imprime los tres arreglos.

9
10
11
4. Utilizando un arreglo con 50 caracteres y manejando apuntadores a caracteres, identificar si una
frase es un palíndroma (se lee de derecha a izquierda y de izquierda a derecha de la misma forma).

Por ejemplo: “No di mi decoro, cedí mi don. (de Juan Filloy)”. Quitar los espacios en blanco de la
cadena original. Se deberá declarar un apuntador, llamado i, al inicio de la cadena y otro apuntador,
llamado f, al final. Se deberá ir comparando si los caracteres a los cuales apuntan i y f son iguales. El
apuntador i deberá avanzar hacia el último elemento del arreglo y el apuntador f deberá avanzar
hacia el primer elemento del arreglo hasta que los apuntadores se encuentren o hasta que se
detecte que los caracteres comparados no son iguales.

La entrada será la cadena original.

La salida será la cadena sin espacios en blanco y el mensaje de si fue o no palíndroma.

Además de main, se deberán definir funciones para cada una de las siguientes tareas:

1. Creación del arreglo.


2. Comparación de las cadenas.
3. Impresión de la salida.

12
13
Conclusiones:

El objetivo de la práctica se cumplió ya que se utilizaron los apuntadores y se accedió a las


localidades de memoria de diferentes tipos de datos sin embargo no se cumplió con todos los
programas a realizar.

Referencias:

BIBLIOGRAFIA CONSULTADA:

http://www.gayatlacomulco.com/tutorials/tutorc/t66.htm

http://aprendeenlinea.udea.edu.co/lms/men_udea/pluginfile.php/25669/mod_resource/content/
0/documentos/Apuntadores.pdf

http://www.gridmorelos.uaem.mx/~mcruz//cursos/lic/apuntado.pdf

14

Das könnte Ihnen auch gefallen