Unidad Culhuacan Estructura y bases de datos Grupo: Practica 2 Apuntadores Integrantes del equipo: Grupo: Profesor: Ezequiel Snchez !urez 1 Tema 2 Apuntadores Objetivo del tema Aprender a conceptualizar un apuntador. Manejar el concepto de puntero y apuntador, derivado de este, implementar las diferentes formas para el manejo de los datos nativos en Cpor su direcci!n "ue se re"uieren para controlar el #ujo material en la soluci!n de un problema. Aprender a diferenciar los distintos tipos de datos y adecuarlos a las necesidades del manejo por direcci!n de la informaci!n. Apuntadores 2.1 $ntroducci!n 2.2 Asi%naci!n directa 2.& 'unteros y Apuntadores 2,( )eclaraci!n de apuntadores 2.* implementaci!n de apuntadores 2,+ ,so de apuntadores 2.-Ejemplos 2.. Conclusi!n $ntroducci!n En la pr/ctica anterior, se aprendi! a conceptualizar la informaci!n, al de0nir el tipo de dato nativo a emplear. 'ero los datos no se almacenan donde uno "uisiera encontrarlos f/cilmente, en el proceso de almacenamiento se destina un espacio en la memoria donde el dato "uedar/ almacenado. 1a pre%unta interesante "ue sur%e es 2d!nde "ueda almacenado este dato3 4 lo in"uietante es 2lo podremos manipular en el momento "ue se le re"uiera3 1a respuesta a estas pre%untas esta en los apuntadores por lo en esta pr/ctica aprenderemos a usar los apuntadores como una 5erramienta mediante la cual con las direcciones se tendr/ la posibilidad de manejar la informaci!n 5aciendo referencia a su direcci!n. Consideraciones te!ricas Asi%naci!n directa e indirecta En las computadoras la informaci!n se maneja y almacena en una de las memorias de la ma"uina, en primer lu%ar en la memoria 6AM y posteriormente en el disco duro del ordenador. 1as unidad b/sica de almacenamiento es el bit y cada bit s!lo puede trabajar con dos valores 7ceros 8 y unos 19, a su vez los bits se 2 manejan por octetos formando as: lo "ue se denomina para este curso la unidad m:nima de comunicaci!n "ue es la palabra conformada por un arre%lo de oc5o bits. En el procesador s!lo se manejan palabras bytes, estas unidades de comunicaci!n se les asi%na en forma aleatoria por el administrador del sistema operativo una direcci!n cada vez "ue se acceso una palabra a la memoria. Con eso "ueda claro "ue todo tipo de informaci!n "ue se maneja en la computadora tiene de antemano asi%nada una direcci!n den la memoria. En este caso es conveniente pre%untar c!mo se realiza esta asi%naci!n de memoria. 'ara lo "ue cual se manejan dos tipos de asi%naci!n, una directa y la otra en forma indirecta. Asi%naci!n directa Como se aprendi! en la pr/ctica 1, al declarar una variable se inicio la primera parte para la captura de informaci!n, en primer lu%ar a la variable se le puede asi%nar en forma directa un valor para el cual fue declarada, para 5acer esta asi%naci!n se 5ar/ uso del operador asi%naci!n 7;9 en el uso del operador asi%naci!n, se debe tener cuidado de veri0car el tipo de dato "ue se va asi%nar a cada variable, ya "ue si el tipo del dato con "ue se declar! no coincide con el tipo de dato "ue se est/ capturando se presentara un problema de incon%ruencia en la captura. 'or ejemplo< =i se declara la variable c!di%o de tipo int, de la misma manera se debe capturar una informaci!n de tipo entero. int c!di%o> codi%o ; 12&> En el ejemplo anterior se est/ asiendo una asi%naci!n directa, cuando a la variable codi%o se le asi%na en forma directa el valor de 12&. )e tal forma a la variable c!di%o en esta asi%naci!n autom/ticamente se le proporciona una direcci!n. Operadores de asi%naci!n Adem/s del uso simple del operador asi%naci!n, se tiene seis aplicaciones de asi%naci!n matem/ticos como se muestra a continuaci!n. Asi%naci !n 6esultado Aplicaci!n e"uivale ; Asi%na el valor de una variable a otra p ; " p ;." ; =uma al valor de la variable una cantidad y lo asi%na a la variable ori%inal p ; " p ; p " ?; 6esta al valor de la variable una p?; " p ; p & cantidad y lo asi%na a la variable ori%inal " @; Multiplica el valor de la variable por una cantidad y el resultado lo asi%na a la variable ori%inal ' @ ; " p ; p @ " A; )ivide el valor de la variable entre una cantidad y el residuo lo asi%na a la variable ori%inal p A ; " p ; p A " B; )ivide el valor de la variable entre una cantidad y el resultado lo asi%na a la variable ori%inal ' B ; " p ; pB" Asi%naci!n indirecta 'unteros y apuntadores 1a informa i!n se captura para tener un control sobre esta, pero 2c!mo localizar en "ue parte se encuentra almacenada3 1a respuesta a esta interro%ante la encontramos en el uso de punteros y apuntadores, en primer lu%ar se tiene "ue armar un puntero, el cual es una variable "ue s!lo contiene la direcci!n de otra variable, a continuaci!n se implementa el apuntador, o sea, "ue al puntero para poder tener acceso a la informaci!n "ue contiene la otra variable se le indica a travCs del operador indirecci!n 7@9 la acci!n para poder disponer la informaci!n "ue se encuentra almacenada en esta variable. 'ara implementar un puntero, en primer lu%ar a una variable se le asi%na la direcci!n de la variable "ue se desea manejar, esta acci!n se realiza aplicando a la variable "ue se desea manipular el operador direcci!n 7D9 este operador entre%a la direcci!n en "ue se encuentra localizada la variable, la cual en forma directa se le asi%na a la variable con la se busca tener acceso a la informaci!n, con esta asi%naci!n se est/ implementado un puntero, ya "ue la variable s!lo tiene la direcci!n de la variable a manipular. 'or Eltimo al a%re%ar el operador indirecci!n 7@9 al puntero se tendr/ estructurado un apuntador. Ejemplo< 1a variable a manipular es c!di%o la cual se declara de la si%uiente manera $nt c!di%o> 1a pre%unta es en "uC direcci!n se encuentra c!di%o. Con el operador direcci!n se veri0ca en "uC direcci!n se localiza c!di%o. 1a direcci!n "ue tiene c!di%o se asi%na al puntero aeromeFico ( localiza ; Dc!di%o> En este momento localiza se convierte en un puntero ya "ue solo contiene la direcci!n de la variable c!di%o. Cuando se le adiciona el operador indirecci!n 7@9 con el puntero localiza se implementa el apuntador, o sea "ue el apuntador localiza apunta al contenido de la variable c!di%o. 1os pasos para 5acer uso de un apuntador son los si%uientes. 1. =e declaran las variables a manipular. 2. =e le asi%na valor a la variable a minipular &. =e localiza la direcci!n de la variable a minipular. (. =e arma el apuntador *. =e 5ace uso del apuntador. )ecalraciGn de las variables $nt c!di%o> 7declaraci!n de la variable a manipular9 $nt @localiza> 7declaraci!n del apuntador9 localiza ; Dc!di%o> 7implementaci!n del puntero9 contenidoHcodi%o ; @localiza> 7transferencia de informaci!n del apuntador9 direcci!nHcodi%o ; localiza> 7direcci!n "ue contiene el puntero 9 Como se puede observar en el ejemplo anterior, el contenido de c!di%o se le asi%na en forma indirecta a la variable contenidoHcodi%o, o sea "ue el contenido de la variable c!di%o en forma indirecta a travCs del apuntador localiza se asi%no a la variable contenidoHcodi%o. Con lo "ue se da por de0nido "ue el apuntador, apunta al contenido de una variable a travCs de su direcci!n. )esarrollo Aplicaci!n =e desea controlar la cantidad de alumnos "ue est/n inscritos en un determinado %rupo, para lo "ue se 5ace necesario saber en "uC direcci!n se encuentran localizada la cantidad de alumnos inscritos, para lue%o mostrar la cantidad de alumnos inscritos. Al%oritmo 1. $nicio * 2. )eclaraci!n de variables &. $ntroducci!n de informaci!n (. Armado de punteros *. Armado de apuntadores +. Mostrar la informaci!n re"uerida -. 0n )ia%rama de #ujo Codi0caci!n B@captura y revisi!n, de la cantidad de alumnos inscritos@B IincludeJstdio.5K Main79 L $nt alumnos, cantidadHalumnos> $nt @localizador> printf7Mcuantos alumnos est/n incritosN9> scanf7MAdN, Dalumnos9> localizador ; Dalumnos> cantidadHalumnos; @loclizador> + )eclaraci !n de variables $ntroducci!n de valores Armado de punteros y apuntadores Mostrar la cantidad de alumnos y su direcci!n 0 n inic io printf 7Mla ciantidad de alumnos inscritos es< M, cantidadHalumnos9> printf 7Mest/n en la direcci!n< M, localizador9> O Conclusi!n 1os apuntadores son una 5erramienta importante en el manejo de la informaci!n. Al ad"uirir la 5abilidad de manejar la informaci!n por su direcci!n se esta 5aciendo uso de la versatilidad "ue ofrece el manejo de la informaci!n de acuerdo a la ubicaci!n "ue ten%a en la memoria. Adem/s el uso de los apuntadores se pude orientar al manejo de arre%los, estructuras, estructuras con uni!n, y funciones en las "ue se 5a%a necesario referir el contenido de una variable por su direcci!n. 1os operadores "ue se tiene a disposici!n para implementar un apuntador< El operador direcci!n 7D9 al aplicarlo a una variable devuelve la direcci!n en "ue se almacen! la variable, el operador indirecciGn 7@9 el "ue se adiciona al puntero para declarar una variable como apuntador, en la declaraci!n de acuerdo al an/lisis de la naturaleza del dato, se determina el tipo de dato al "ue se asocia el apuntador. recomendaciones En esta parte se 5ar/ la indicaci!n de c!mo se puede usar la codi0caci!n "ue dio soluci!n al problema particular del e"uipo de eFposici!n. Piblio%raf:a 1. 4edidya5, 1. Mas5e, A. Aaron, T. 1QQ+. Estructuras de datos con C y C++. Mxico: Prentice Hall. -