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.

CAPITULO 3: APUNTADORES Y CADENAS<br />

El estudio <strong>de</strong> las ca<strong>de</strong>nas es útil para profundizar <strong>en</strong> la relación <strong>en</strong>tre apuntadores y arreglos. Facilita,<br />

a<strong>de</strong>más la <strong>de</strong>mostración <strong>de</strong> cómo algunas <strong>de</strong> las funciones estándar <strong>de</strong> ca<strong>de</strong>nas <strong>de</strong> C pue<strong>de</strong>n ser<br />

implem<strong>en</strong>tadas. Finalm<strong>en</strong>te ilustraremos cómo y cuando los apuntadores pue<strong>de</strong>n y <strong>de</strong>b<strong>en</strong> ser pasados a una<br />

función.<br />

En C, las ca<strong>de</strong>nas son arreglos <strong>de</strong> caracteres. Esto no es necesariam<strong>en</strong>te cierto para otros l<strong>en</strong>guajes. En Basic,<br />

Pascal, Fortran y <strong>en</strong> otros l<strong>en</strong>guajes, una ca<strong>de</strong>na ti<strong>en</strong>e <strong>de</strong>finido su propio tipo <strong>de</strong> datos. Pero <strong>en</strong> C, esto no es<br />

así. En C una ca<strong>de</strong>na es un arreglo <strong>de</strong> caracteres terminado con un carácter binario <strong>de</strong> cero (escrito como \0).<br />

Para com<strong>en</strong>zar nuestra discusión escribiremos algo <strong>de</strong> código, el cual si bi<strong>en</strong> es preferido para propósitos<br />

meram<strong>en</strong>te ilustrativos, probablem<strong>en</strong>te no lo escribirás <strong>en</strong> un programa real. Consi<strong>de</strong>remos por ejemplo:<br />

char mi_ca<strong>de</strong>na[40];<br />

mi_ca<strong>de</strong>na [0] = 'T';<br />

mi_ca<strong>de</strong>na [1] = 'e';<br />

mi_ca<strong>de</strong>na [2] = 'd':<br />

mi_ca<strong>de</strong>na [3] = '\0';<br />

Si bi<strong>en</strong> uno nunca construiría ca<strong>de</strong>nas <strong>de</strong> este modo, el resultado final es una ca<strong>de</strong>na que es <strong>en</strong> realidad un<br />

arreglo <strong>de</strong> caracteres terminado con un caracter nul. Por <strong>de</strong>finición, <strong>en</strong> C, una ca<strong>de</strong>na es un arreglo <strong>de</strong><br />

caracteres terminado con el carácter nul. Hay que t<strong>en</strong>er cuidado con que nul no es lo mismo que NULL. El “nul”<br />

se refiere a un cero <strong>de</strong>finido por la secu<strong>en</strong>cia <strong>de</strong> escape ‘\0’. Esto es, que ocupa un byte <strong>de</strong> memoria. El<br />

“NULL”, por ot ra parte, es el nombre <strong>de</strong> la macro usada para inicializar apuntadores nulos. NULL está <strong>de</strong>finido<br />

<strong>en</strong> un archivo <strong>de</strong> cabecera <strong>de</strong>l compilador <strong>de</strong> C, mi<strong>en</strong>tras que nul pue<strong>de</strong> no estar <strong>de</strong>finido <strong>de</strong>l todo.<br />

Ya que al estar escribi<strong>en</strong>do código como el <strong>de</strong> arriba gastaríamos mucho tiempo, C permite dos modos<br />

alternativos <strong>de</strong> llegar al mismo resultado. El primero sería escribir:<br />

char mi_ca<strong>de</strong>na [40] = {'T', 'e', 'd', '\0',};<br />

Pero se lleva más tecleado <strong>de</strong>l que es conv<strong>en</strong>i<strong>en</strong>te. Así que C permite:<br />

char mi_ca<strong>de</strong>na [40] = "Ted";<br />

Cuando usamos las comillas dobles, <strong>en</strong> lugar <strong>de</strong> las simples usadas <strong>en</strong> los ejemplos anteriores, el carácter nul<br />

(‘\0’) se aña<strong>de</strong> automáticam<strong>en</strong>te al final <strong>de</strong> la ca<strong>de</strong>na.<br />

En cualquiera <strong>de</strong> los casos <strong>de</strong>scritos arriba suce<strong>de</strong> la misma cosa,. El compilador asigna un bloque continuo <strong>de</strong><br />

memoria <strong>de</strong> 40 bytes <strong>de</strong> longitud para alojar los caracteres y los inicializa <strong>de</strong> tal manera que los primeros 4<br />

caracteres son Ted\0.<br />

13

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

Saved successfully!

Ooh no, something went wrong!