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.

Tratemos ahora el problema <strong>de</strong> qué le vamos a pasar a bubble(). Queremos hacer que el primer parámetro <strong>de</strong><br />

esta función sea un puntero sin tipo. Pero, eso significa que <strong>de</strong>ntro <strong>de</strong> bubble() <strong>de</strong>bemos hacer algo al respecto<br />

<strong>de</strong> la variable t, la que actualm<strong>en</strong>te es <strong>de</strong> tipo <strong>en</strong>tero. A<strong>de</strong>más, don<strong>de</strong> usamos t=p[j -1]; el tipo <strong>de</strong> p[j-1] necesita<br />

ser conocido <strong>en</strong> razón <strong>de</strong> saber cuantos bytes serán copiados a la variable t (o a cualquier otras cosa con la<br />

que reemplacemos a t).<br />

Hasta ahora, <strong>en</strong> bubble_4.c, el conocimi<strong>en</strong>to <strong>de</strong>ntro <strong>de</strong> bubble() <strong>de</strong>l tipo <strong>de</strong> datos a ser or<strong>de</strong>nado (y por tanto el<br />

tamaño individual <strong>de</strong> cada elem<strong>en</strong>to) es obt<strong>en</strong>ido <strong>de</strong> el hecho <strong>de</strong> que el primer parámetro es un puntero <strong>de</strong> tipo<br />

<strong>en</strong>tero. Si queremos ser capaces <strong>de</strong> utilizar a bubble() para or<strong>de</strong>nar cualquier tipo <strong>de</strong> datos, necesitamos hacer<br />

<strong>de</strong> este parámetro un puntero <strong>de</strong>l tipo void. Pero al hacer eso, per<strong>de</strong>mos la información respecto <strong>de</strong>l tamaño<br />

individual <strong>de</strong> los elem<strong>en</strong>tos <strong>de</strong>ntro <strong>de</strong>l arreglo. Así que <strong>en</strong> bubble_5.c añadiremos un parámetro extra para<br />

manejar la información <strong>de</strong>l tamaño.<br />

Estos cambios <strong>de</strong>s<strong>de</strong> bubble_4.c a bubble_5.c son, al parecer, un poco más ext<strong>en</strong>sos que aquellos que hicimos<br />

antes.<br />

Así que revisa cuidadosam<strong>en</strong>te las difer<strong>en</strong>cias:<br />

bubble_5.c<br />

/* Program bubble_5.c from PTRTUT10.HTM 6/13/97 */<br />

#inclu<strong>de</strong> <br />

#inclu<strong>de</strong> <br />

long arr[10] = { 3,6,1,2,3,8,4,1,7,2};<br />

void bubble(void *p, size_t width, int N);<br />

int compare(void *m, void *n);<br />

int main(void)<br />

{<br />

int i;<br />

putchar('\n');<br />

}<br />

for (i = 0; i < 10; i++)<br />

{<br />

printf("%d ", arr[i]);<br />

}<br />

bubble(arr, sizeof(long), 10);<br />

putchar('\n');<br />

for (i = 0; i < 10; i++)<br />

{<br />

printf("%ld ", arr[i]);<br />

}<br />

return 0;<br />

43

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

Saved successfully!

Ooh no, something went wrong!