C/Visual C - Dudas array de punteros [C]

 
Vista:

Dudas array de punteros [C]

Publicado por Tram (1 intervención) el 20/08/2008 12:51:36
Hola,
tengo el siguiente código en C


#include <stdio.h>
#include <stdlib.h>

int main(void){

char *ad[5];
int i;
char *p;

p=(char *)malloc(100);

for(i=0; i<100; i++)
*(p+i)=0;

for(i=0; i<5; i++)
ad[i]=p + i* 3;

for(i=0; i<5; i++)
gets(ad[i]);

printf(ad[1]-1);
free(p);

}


Se ejecuta con la siguiente entrada:
hola
examen
el
struct
array

y el resultado por pantalla es "lexael".
Después de hacer varias trazas, no consigo entender cómo funciona exactamente el segundo bucle for. Sé que en cada iteración hace "p+0", "p+3", "p+6",... y que en el array de punteros se van almacenando las líneas que se escriben por teclado ( ad[0]=hola, ad[1]=examen,...) pero luego no consigo ver cómo sale ese resultado. Si alguien me pudiera dar una breve explicación..
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Dudas array de punteros [C]

Publicado por eduardo (82 intervenciones) el 20/08/2008 21:52:46
En el segundo bucle lo que estás haciendo es que cada elementos del array ad apunte o haga referencia
a las posiciones:
ad[ 0 ] -> p + 0
ad[ 1 ] -> p + 3
ad[ 2 ] -> p + 6
..
siendo p un puntero que apunta a la primera de 100 posiciones de memoria asignada dinamicamente.

De tal forma que en el siguiente bucle: ingresas:
hola
ad[ 0 ] -> 'h' (p + 0)
p = "hola"

examen
ad[ 1 ] -> 'a' (p + 3) (escribe sobre la 'a')
p = "holexamen"

el
ad[ 2 ] -> 'm' (p + 6) (escribe sobre la 'm')
p = "holexael"
...

struct
ad[ 3 ] -> ''
p = "holexaelstruct"
...

printf( ad[ 1 ] - 1 );
finalmente escribes la segunda cadena a partir de un caracter a la izquierda hasta encontrar
un caracter nulo y como verás la segunda cadena parte desde exael, un caracter antes lexael.

No sé para que lo aplicarás pero con una comprobación paso a paso puedes saber que valores se van tomando en otros casos.

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar