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.

En C, el estándar establece que don<strong>de</strong> usemos &nombre_<strong>de</strong>_la_variable[0] po<strong>de</strong>mos reemplazarle con<br />

nombre_<strong>de</strong>_la_variable, esto <strong>en</strong> el código <strong>de</strong> ejemplo lo que escribimos como:<br />

ptr = &mi_arreglo[0];<br />

po<strong>de</strong>mos escribirlo como:<br />

ptr = mi_arreglo;<br />

y obt<strong>en</strong>emos el mismo resultado.<br />

Esto conduce a muchos textos a <strong>de</strong>cir que el nombre <strong>de</strong> un arreglo es un apuntador. Si bi<strong>en</strong> esto es cierto,<br />

prefiero p<strong>en</strong>sar que “el nombre <strong>de</strong> un arreglo es la dirección <strong>de</strong>l primer elem<strong>en</strong>to que conti<strong>en</strong>e el arreglo”.<br />

Muchos principiantes (incluyéndome a mi cuando estuve apr<strong>en</strong>di<strong>en</strong>do) muestran t<strong>en</strong><strong>de</strong>ncia a confundirse<br />

p<strong>en</strong>sando <strong>en</strong> el como un puntero.<br />

Por ejemplo, si bi<strong>en</strong> po<strong>de</strong>mos hacer ptr = mi_arreglo; no po<strong>de</strong>mos hacer:<br />

mi_arreglo = ptr;<br />

La razón es que mi<strong>en</strong>tras ptr es una variable, mi_arreglo es una constante. Esto es, la dirección <strong>en</strong> la que el<br />

primer elem<strong>en</strong>to <strong>de</strong> mi_arreglo será almac<strong>en</strong>ado no pue<strong>de</strong> ser cambiado una vez que mi_arreglo[] ha sido<br />

<strong>de</strong>clarado.<br />

Anteriorm<strong>en</strong>te , al discutir el término “lvalue”, se estableció que:<br />

“Un objeto es una región <strong>de</strong> almac<strong>en</strong>ami<strong>en</strong>to; Un lvalue es una expresión que hace refer<strong>en</strong>cia a un<br />

objeto.”<br />

Esto plantea un problema interesante. Ya que mi_arreglo es una región nominada <strong>de</strong> almac<strong>en</strong>ami<strong>en</strong>to, ¿Por<br />

qué no es mi_arreglo <strong>en</strong> la asignación que se hace arriba el lvalue?. Para resolver este problema, algunos se<br />

refier<strong>en</strong> a cosas como mi_arreglo como un “lvalue no modificable”.<br />

Modifiquemos el programa <strong>de</strong> ejemplo cambiando:<br />

ptr = &mi_arreglo [0]; por ptr = mi_arreglo;<br />

ejecuta <strong>de</strong> nuevo para verificar que los resultados son idénticos.<br />

Profundicemos un poco más con la difer<strong>en</strong>cia <strong>en</strong>tre los nombres ptr y mi_arreglo como hicimos arriba.<br />

Algunos escritores se refier<strong>en</strong> al nombre <strong>de</strong> un arreglo como un puntero constante. ¿Qué queremos <strong>de</strong>cir con<br />

esto? Bu<strong>en</strong>o, para <strong>en</strong>t<strong>en</strong><strong>de</strong>r el término “constante” <strong>en</strong> este contexto, volvamos a nuestra <strong>de</strong>finición <strong>de</strong>l término<br />

“variable”. Cuando <strong>de</strong>claramos una variable reservamos un lugar <strong>de</strong> la memoria para almac<strong>en</strong>ar el valor <strong>de</strong>l tipo<br />

apropiado. Una vez hecho esto, el nombre <strong>de</strong> la variable pue<strong>de</strong> ser interpretado <strong>en</strong> una <strong>de</strong> dos maneras.<br />

Cuando es usada <strong>en</strong> el lado izquierdo <strong>de</strong>l operador <strong>de</strong> asignación, el compilador la interpreta como la dirección<br />

<strong>de</strong> memoria <strong>en</strong> la cual colocar el resultado <strong>de</strong> la evaluación <strong>de</strong> lo que se <strong>en</strong>cu<strong>en</strong>tra al lado <strong>de</strong>recho <strong>de</strong>l operador<br />

<strong>de</strong> asignación. Pero cuando se usa <strong>de</strong>l lado <strong>de</strong>recho <strong>de</strong>l operador <strong>de</strong> asignación, el nombre <strong>de</strong> una variable es<br />

11

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

Saved successfully!

Ooh no, something went wrong!