17.05.2013 Views

Tutorial de Apuntadores y Arreglos en C - Cimat

Tutorial de Apuntadores y Arreglos en C - Cimat

Tutorial de Apuntadores y Arreglos en C - Cimat

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Ahora que esta estructura <strong>en</strong> particular es muy pequeña comparada con aquellas usadas <strong>en</strong> muchos<br />

programas <strong>de</strong> C. A la <strong>de</strong> arriba tal vez quisiéramos añadir (sin mostrar el tipo <strong>de</strong> datos <strong>en</strong> particular):<br />

-Dirección -Teléfono -Código Postal<br />

-Ciudad -Estado Civil -Nº <strong>de</strong>l seguro social,… etc.<br />

Si t<strong>en</strong>emos una cantidad consi<strong>de</strong>rable <strong>de</strong> empleados, lo i<strong>de</strong>al sería manejar los datos <strong>de</strong>ntro <strong>de</strong> estas<br />

estructuras por medio <strong>de</strong> funciones. Por ejemplo queremos implem<strong>en</strong>tar una función que imprimiera el nombre<br />

<strong>de</strong> los empleados, cont<strong>en</strong>idos <strong>en</strong> cualquier estructura que le pasara. Sin embargo, <strong>en</strong> el l<strong>en</strong>guaje C original<br />

(Kernighan & Ritchie, 1 ª Edición) no era posible pasar una estructura como parámetro a una función, sólo un<br />

puntero que apuntara a una estructura. En el ANSI C, ahora es posible pasar una estructura completa. Pero, ya<br />

que nuestro objetivo es apr<strong>en</strong><strong>de</strong>r sobre punteros, no iremos tras esto ahora.<br />

De cualquier modo, si pasáramos la estructura completa significa que <strong>de</strong>bemos copiar el cont<strong>en</strong>ido <strong>de</strong> la<br />

estructura <strong>de</strong>s<strong>de</strong> la función que llama a la función llamada. En sistemas que usan pilas (stacks), esto se hace<br />

meti<strong>en</strong>do los cont<strong>en</strong>idos <strong>de</strong> la estructura <strong>de</strong>ntro <strong>de</strong> la pila. Con estructuras gran<strong>de</strong>s esto pue<strong>de</strong> repres<strong>en</strong>tar un<br />

problema. Sin embargo pasar apuntadores usa un mínimo <strong>de</strong> espacio <strong>en</strong> la pila.<br />

Como sea, ya que estamos discuti<strong>en</strong>do apuntadores, discutiremos <strong>en</strong>tonces como pasarle a una función un<br />

puntero que apunta a una estructura y cómo usarlo <strong>de</strong>ntro <strong>de</strong> la función.<br />

Consi<strong>de</strong>ra el caso <strong>de</strong>scrito: queremos una función que acepte como parámetro un puntero a una estructura y<br />

<strong>de</strong>ntro <strong>de</strong> esa función queremos acce<strong>de</strong>r a los miembros <strong>de</strong> la estructura. Por ejemplo, queremos imprimir el<br />

nombre <strong>de</strong>l empleado <strong>de</strong> nuestra estructura <strong>de</strong> ejemplo.<br />

Bi<strong>en</strong>, como sabemos que nuestro apuntador va a apuntar a una estructura <strong>de</strong>clarada usando struct ficha.<br />

Declaramos dicho apuntador con la <strong>de</strong>claración:<br />

struct ficha *st_ptr;<br />

Y hacemos que apunte a nuestra estructura <strong>de</strong> ejemplo con:<br />

st_ptr = &mi_ficha;<br />

Ahora podremos acce<strong>de</strong>r a un miembro <strong>de</strong> la estructura <strong>de</strong>srefer<strong>en</strong>ciando el puntero. Pero, ¿Cómo<br />

<strong>de</strong>srefer<strong>en</strong>ciamos un puntero a estructura? Bu<strong>en</strong>o, consi<strong>de</strong>remos el hecho <strong>de</strong> que queramos usar el puntero<br />

para cambiar la edad <strong>de</strong>l empleado. Para esto escribiríamos:<br />

(*st_ptr).edad = 63;<br />

Observa cuidadosam<strong>en</strong>te. Dice, reemplaza lo que se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong>tre paréntesis por aquello a lo que st_ptr<br />

está apuntando, lo cual es la estructura mi_ficha. Así que esto se reduce a lo mismo que mi_ficha.edad.<br />

20

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!