[C con Clase] Por fa colaboranm con esta duda
Steven Richard Davidson
stevenrichard.davidson en gmail.com
Vie Nov 23 19:40:43 CET 2007
Hola César Andrés,
On 11/23/07, CESAR ANDRES ROMERO <anromartinez en hotmail.com> wrote:
> este es masomenos el grafico, apartir de eso debo hacer el codigo generado, pero no me sale el codigo de la forma que lo tengo, el apuntador p de 2do ninel apunta a uno de primer y este a su ves apunta a la estructura A, x apunta a 3.2 y y apunta a z que es igual a 5
>
Veamos el código.
>
> #include <stdio.h>
> #include <conio.h>
> #include <iostream.h>
>
> struct A
> {
> float *x;
> int *y;
> };
> void main ()
>
> {
> clrscr ();
> A**p;
> int z;
> z=5;
> p=new A;
Esto no es correcto. La variable 'p' es un doble puntero a la
estructura 'A'. Es decir, 'p' apunta a un puntero el cual apunta a una
estructura 'A'.
Podríamos hacer lo siguiente:
p = new A*; // creamos un puntero a 'A'
*p = new A; // creamos un 'A'
>
> *p->x=new float;
Esto no es correcto por la precedencia de operadores. Sería,
(*p)->x = new float;
Recuerda que 'p' es un doble puntero, y por tanto hay que seguir los
"vínculos" por doble partida debido a la doble indirección.
> *p->x=3.2;
>
Esto no es correcto. Nuevamente, tenemos que hacer dos indirecciones
para 'p' y luego otro acceso para el valor apuntado por 'x'. Recuerda
que 'x' también es un puntero. Al final obtendremos,
*(*p)->x = 3.2f;
> p->y=&z;
>
Nuevamente, 'p' necesita un doble acceso para llegar a 'x'. Esto es,
(*p)->y = &z;
> cout<<" "<<*p->y<<endl;
> cout<<" "<<*p->x<<endl;
Como ya he mencionado anteriormente, necesitamos un doble acceso al
usar 'p'. Reescrito, tenemos que,
cout << " " << (*p)->y << endl;
cout << " " << (*p)->x << endl;
Ahora bien, lo anterior imprimirá las direcciones de memoria guardadas
en 'x' e 'y'. Si quieres mostrar los valores apuntados por 'x' e 'y',
entonces tenemos que hacer otro acceso:
cout << " " << *(*p)->y << endl;
cout << " " << *(*p)->x << endl;
Espero haber aclarado las dudas.
Steven
Más información sobre la lista de distribución Cconclase