Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/08/2008, 22:20
yackcae
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 16 años, 6 meses
Puntos: 2
Respuesta: Explicación código [C]

Es un interesante ejemplo de apuntadores, empezaré desde el principio para que se entienda mejor y trataré de explicarlo lo mejor que pueda:

Código:
p=(char *)malloc(100);
p pasa a apuntar a un sector de memoria con tamaño de 100 bytes.

Código:
for(i=0; i<100; i++)
      *(p+i)=0;
Se inicializa el sector de memoria a donde apunta p para que todo sea 0, quedando p="\0\0\0..."

Código:
for(i=0; i<5; i++)
      ad[i]=p + i* 3;
ad es un arreglo de apuntadores, lo que hace el for es asignar a cada apuntador de ad una posición de p saltando de 3 en 3, quedando así:
ad[0]=p; // ad[0] es igual que p
ad[1]=p+3; // ad[1] apunta a la tercera posición de la memoria asignada para p
ad[2]=p+6; // ad[2] apunta a la sexta posición de la memoria asignada para p
...

Código:
   for(i=0; i<5; i++)
      gets(ad[i]);
ahora se está obteniendo una cadena para cada apuntador, pero lo que se introduzca será guardado en la memoria que fue asignada para p, saltando de 3 en 3, quedando así:

Código:
primero tenemos que p="\0\0\0..."
ad[0] el usuario introduce "hola" ahora p=="hola\0\0\0..."
ad[1] el usuario introduce "examen" pero ad[1] apunta a la tercera posición de p así que p=="holexamen\0\0\0..."
ad[2] el usuario introduce "el" (ad[2] apunta a p+6) por lo que p=="holexael\0\0\0..."
ad[3] el usuario introduce "struct" (ad[3] == p+9) por lo que p=="holexael\0struct\0\0\0..."
ad[4] el usuario introduce "array" (ad[4] == p+12) por lo que p=="holexael\0strarray\0\0\0..."
por último:

Código:
printf(ad[1]-1);
Se está escribiendo el contenido de p según el apuntador ad[1]-1, ad[1] apunta a la tercera posición de la memoria asignada a p pero al restarle 1 al apuntador éste pasa a apuntar a la segunda posición de la memoria, quedando así:

ad[1]-1=="lexael\0strarray\0\0\0..." como hay un \0 antes de "strarray" solo se escribe "lexael"

puedes probar a introducir todas las palabras mayores de 3 letras y así podrás ver como se forma una palabra a partir de las 3 primeras letras de cada palabra dada, excepto de la primera de la cual se usará solo la tercera letra.