[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