{"id":34016,"date":"2024-02-16T19:05:33","date_gmt":"2024-02-16T19:05:33","guid":{"rendered":"https:\/\/blogs.ugto.mx\/rea\/?p=34016"},"modified":"2024-02-16T19:05:33","modified_gmt":"2024-02-16T19:05:33","slug":"clase-digital-13-apuntadores-declaracion-aritmetica-operador-de-direccion-y-operador-de-referencia","status":"publish","type":"post","link":"https:\/\/blogs.ugto.mx\/rea\/clase-digital-13-apuntadores-declaracion-aritmetica-operador-de-direccion-y-operador-de-referencia\/","title":{"rendered":"Clase digital 13. Apuntadores: declaraci\u00f3n, aritm\u00e9tica, operador de direcci\u00f3n y operador de referencia"},"content":{"rendered":"\n\n\n<div class=\"wp-block-cover is-light\" style=\"min-height:284px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-40 has-background-dim\"><\/span><img decoding=\"async\" class=\"wp-block-cover__image-background wp-image-34298\" alt=\"\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.14.30.png\" data-object-fit=\"cover\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1824\" height=\"921\" class=\"wp-block-cover__image-background wp-image-34298\" alt=\"\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.14.30.png\" data-object-fit=\"cover\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.14.30.png 1824w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.14.30-300x151.png 300w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.14.30-1024x517.png 1024w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.14.30-768x388.png 768w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.14.30-1536x776.png 1536w\" sizes=\"auto, (max-width: 1824px) 100vw, 1824px\" \/><\/noscript><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<p class=\"has-text-align-center has-base-3-color has-text-color has-large-font-size wp-block-paragraph\">Apuntadores: declaraci\u00f3n, aritm\u00e9tica, operador de direcci\u00f3n y operador de referencia<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"introduccion\">Introducci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bienvenida o Bienvenido a una de las clases m\u00e1s interesantes de Programaci\u00f3n B\u00e1sica. Al transitarla podr\u00e1s comprender y manipular uno de los dos recursos principales de todo equipo de c\u00f3mputo, la memoria. El objetivo de esta clase es conocer qu\u00e9 es un apuntador y su importancia en programaci\u00f3n, cu\u00e1les son sus elementos, y c\u00f3mo implementarlos en el lenguaje de programaci\u00f3n C. Para lograrlo mant\u00e9n tu mente abierta para imaginar el funcionamiento interno de una computadora, ya que los apuntadores son conceptos abstractos. Sin m\u00e1s, \u00a1comencemos!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"desarrollo-del-tema\">Desarrollo del tema <\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 es un apuntador?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En pocas palabras es una variable que guarda una direcci\u00f3n de memoria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para comprender a profundidad esta definici\u00f3n, veamos c\u00f3mo se forma una variable. La siguiente figura muestra sus cuatro elementos: identificador, valor, tipo de dato y direcci\u00f3n de memoria.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.09.55.png\" alt=\"\" class=\"wp-image-34295\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"924\" height=\"416\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.09.55.png\" alt=\"\" class=\"wp-image-34295\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.09.55.png 924w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.09.55-300x135.png 300w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.09.55-768x346.png 768w\" sizes=\"auto, (max-width: 924px) 100vw, 924px\" \/><\/noscript><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">En la figura se define una variable entera inicializada con el valor de 5 en el lenguaje C, para lo cual usamos la instrucci\u00f3n&nbsp; <em>int x = 5;<\/em> Esta instrucci\u00f3n realiza m\u00faltiples acciones dentro de nuestra computadora que se describen a continuaci\u00f3n. La primera acci\u00f3n consiste en solicitar al compilador que reserve un espacio en la memoria para almacenar una variable de tipo entero. En C este espacio se mide en bytes y para un tipo entero equivale a 4 bytes. Podemos imaginar que la variable es una caja y que la memoria es un estante donde podemos colocar m\u00faltiples cajas. Sin embargo, para usar el estante debemos reservar un espacio previamente. Este espacio se reserva cada vez que definimos una variable con su tipo de dato, en la figura se tienen 3 espacios reservados para las variables <em>char c, int x, y float y<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La segunda acci\u00f3n que se realiza al lanzar la instrucci\u00f3n <em>int x = 5;<\/em> es asignar una direcci\u00f3n de memoria al espacio reci\u00e9n reservado para la variable x. Dicha direcci\u00f3n consiste en un n\u00famero hexadecimal y puede recuperarse en el lenguaje C mediante el operador ampersand (<strong>&amp;<\/strong>). Para mostrarlo en pantalla debemos usar un operador de formato especial, el <strong>%p<\/strong>. De esta forma, para averiguar qu\u00e9 direcci\u00f3n de memoria fue asignada a la variable x de nuestro ejemplo, podr\u00edamos usar la siguiente instrucci\u00f3n en C.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>printf(\u201c La direcci\u00f3n de memoria de la variable x es %p \u201d, &amp;x);<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La \u00faltima acci\u00f3n que realiza la instrucci\u00f3n <em>int x = 5;<\/em> es ordenar al compilador que asocie el identificador x a la variable, de forma que al usar este nombre podamos recuperar el valor que guarda en ese momento. El valor ser\u00eda entonces, siguiendo nuestra analog\u00eda, lo que depositamos dentro de nuestra caja. Al hacer una reasignaci\u00f3n, por ejemplo con la instrucci\u00f3n <em>x=8;<\/em> el contenido de la caja cambiar\u00eda al vaciar el 5 que ten\u00edamos previamente y depositar el valor actual de 8.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Habiendo recordado los elementos de una variable, podemos ahora ilustrar los elementos de un apuntador. Por favor analice la siguiente figura.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.10.53.png\" alt=\"\" class=\"wp-image-34296\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"927\" height=\"405\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.10.53.png\" alt=\"\" class=\"wp-image-34296\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.10.53.png 927w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.10.53-300x131.png 300w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.10.53-768x336.png 768w\" sizes=\"auto, (max-width: 927px) 100vw, 927px\" \/><\/noscript><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">En la figura se observa que para definir un apuntador se coloca un * entre el tipo de dato (int) y el identificador (px, la p hace referencia a la palabra \u201cpointer\u201d, apuntador). A diferencia de una variable normal, el apuntador guarda como valor una direcci\u00f3n de memoria. Por este motivo, usamos el operador &amp;, seguido del nombre de la variable de la que deseamos conocer su direcci\u00f3n. Los apuntadores son entonces variables que guardan direcciones de memoria. Practiquemos con la creaci\u00f3n de un apuntador en el lenguaje C. Para esto, siga las instrucciones del programa que se muestra en la siguiente figura.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.11.39.png\" alt=\"\" class=\"wp-image-34297\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"924\" height=\"400\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.11.39.png\" alt=\"\" class=\"wp-image-34297\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.11.39.png 924w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.11.39-300x130.png 300w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2024\/02\/Captura-de-Pantalla-2024-02-14-a-las-11.11.39-768x332.png 768w\" sizes=\"auto, (max-width: 924px) 100vw, 924px\" \/><\/noscript><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">En la l\u00ednea 6 definimos nuestra variable entera x y mostramos su valor en la l\u00ednea 9. La l\u00ednea 12 define un apuntador a entero que guarda la direcci\u00f3n de memoria de la variable x. En la l\u00ednea 15 mostramos la direcci\u00f3n de memoria almacenada en el apuntador px, usando el operador %p. Finalmente, la l\u00ednea 18 muestra que al igual que las variables tradicionales, los apuntadores no s\u00f3lo guardan una direcci\u00f3n de memoria, sino que tienen a su vez una direcci\u00f3n de memoria que nos permite ubicarlos y manipularlos. Para obtener el valor contenido en la direcci\u00f3n que guarda el apuntador se utiliza un operador especial *px, el * seguido el nombre de un apuntador. A esta forma de obtener valores se llama <em>derreferenciaci\u00f3n<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;S\u00ed, una direcci\u00f3n de memoria, que al visitarla guarda otra direcci\u00f3n de memoria. En nuestra analog\u00eda del estante, es como si tuvi\u00e9semos una caja que dentro no guarda un valor, sino la direcci\u00f3n de otra caja. En esta segunda podr\u00edamos encontrar ahora s\u00ed un valor o una nueva direcci\u00f3n de memoria. Esta forma de referenciar de una direcci\u00f3n a otra es \u00fatil para la formaci\u00f3n de m\u00faltiples estructuras de datos como listas enlazadas, \u00e1rboles, etc. El concepto de apuntador es uno de los m\u00e1s importantes en programaci\u00f3n, pero tambi\u00e9n uno de los m\u00e1s complejos, por lo cual no debemos preocuparnos si cuesta trabajo comprender este concepto abstracto en la primera aproximaci\u00f3n. La pr\u00e1ctica ser\u00e1 la clave para entenderlo a la perfecci\u00f3n. As\u00ed que te invitamos a mantener tu mente abierta y consultar las referencias sugeridas para complementar el tema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los apuntadores son variables que guardan direcciones de memoria<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el lenguaje C:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Definimos un apuntador con la sintaxis &lt;&lt;tipo de dato&gt;&gt; * &lt;&lt;nombre del apuntador&gt;&gt;<\/li>\n\n\n\n<li>Utilizamos el operador &amp; para recuperar las direcciones de memoria de una variable<\/li>\n\n\n\n<li>Mostramos una direcci\u00f3n de memoria en hexadecimal mediante el formato %p dentro de printf<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Podemos formar estructuras de datos como listas enlazadas o \u00e1rboles mediante el direccionamiento de apuntadores.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fuentes-de-informacion\">Fuentes de informaci\u00f3n<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Video con curso sobre apuntadores en C y C++ (en ingl\u00e9s) <a href=\"https:\/\/www.youtube.com\/watch?v=zuegQmMdy8M\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.youtube.com\/watch?v=zuegQmMdy8M<\/a><\/li>\n\n\n\n<li>Fragmentos de libro en l\u00ednea.<a href=\"https:\/\/www.google.com.mx\/books\/edition\/Aprendiendo_C_en_24_Horas\/o0TAvSRhXKcC?hl=es-419&amp;gbpv=1&amp;dq=apuntadores+en+C&amp;pg=PA6&amp;printsec=frontcove\" target=\"_blank\" rel=\"noreferrer noopener\"> https:\/\/www.google.com.mx\/books\/edition\/Aprendiendo_C_en_24_Horas\/o0TAvSRhXKcC?hl=es-419&amp;gbpv=1&amp;dq=apuntadores+en+C&amp;pg=PA6&amp;printsec=frontcove<\/a>r<\/li>\n\n\n\n<li>Declaraci\u00f3n de apuntadores en C.<a href=\"https:\/\/learn.microsoft.com\/es-es\/cpp\/c-language\/pointer-declarations?view=msvc-170\" target=\"_blank\" rel=\"noreferrer noopener\"> https:\/\/learn.microsoft.com\/es-es\/cpp\/c-language\/pointer-declarations?view=msvc-170 <\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n Bienvenida o Bienvenido a una de las clases m\u00e1s interesantes de Programaci\u00f3n B\u00e1sica. Al transitarla podr\u00e1s comprender y manipular uno de los dos recursos principales de todo equipo de c\u00f3mputo, la memoria. El objetivo de esta clase es conocer qu\u00e9 es un apuntador y su importancia en programaci\u00f3n, cu\u00e1les son sus elementos, y c\u00f3mo &#8230; <a title=\"Clase digital 13. Apuntadores: declaraci\u00f3n, aritm\u00e9tica, operador de direcci\u00f3n y operador de referencia\" class=\"read-more\" href=\"https:\/\/blogs.ugto.mx\/rea\/clase-digital-13-apuntadores-declaracion-aritmetica-operador-de-direccion-y-operador-de-referencia\/\" aria-label=\"Leer m\u00e1s sobre Clase digital 13. Apuntadores: declaraci\u00f3n, aritm\u00e9tica, operador de direcci\u00f3n y operador de referencia\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":142,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","episode_type":"","audio_file":"","podmotor_file_id":"","podmotor_episode_id":"","cover_image":"","cover_image_id":"","duration":"","filesize":"","filesize_raw":"","date_recorded":"","explicit":"","block":"","itunes_episode_number":"","itunes_title":"","itunes_season_number":"","itunes_episode_type":"","footnotes":""},"categories":[880,881],"tags":[],"class_list":["post-34016","post","type-post","status-publish","format-standard","hentry","category-licenciatura-en-ingenieria-biomedica","category-uda-programacion-basica"],"acf":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/34016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/users\/142"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/comments?post=34016"}],"version-history":[{"count":4,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/34016\/revisions"}],"predecessor-version":[{"id":34478,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/34016\/revisions\/34478"}],"wp:attachment":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/media?parent=34016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/categories?post=34016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/tags?post=34016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}