Ver Mensaje Individual
  #6 (permalink)  
Antiguo 22/08/2012, 21:25
cesar_casla
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Acceder un array por direccion

Gracias por hacer un miniprograma de tu duda y no postiar 100 lineas como hacen muchos...


Primero que nada es raro que el g++ no te haya marcado un error del codigo que pusiste(use devC++ y a mi si me marco error).
Como ya te habia dicho antes el cast que haces en:
Código C++:
Ver original
  1. (Network*)net+3).Tag
esta mal. Aclaracion:
net: es un puntero a puntero a Network
*net: es un puntero a Network
**net: es el objeto Network

Sabiendo esto si vos haces net+3 estas modificando el puntero a puntero, pero para poder acceder a Tag tenias que hacer: *(net+3) ó net[3]. Usando cualquiera de esas dos formas en ves del "." debes usar "->" ya que cada subindice del arreglo net es un puntero por lo tanto para acceder a un miembro del objeto tenes que usar -> (tema muy tratado cuando se ve estructuras).
Código C++:
Ver original
  1. (*(net+3))->Tag;
Tambien podes usar el "." pero tenes que acceder al objeto, osea
Código C++:
Ver original
  1. (**(net+3)).Tag


Basta de palabras, te dejo el codigo sin usar malloc y funcionando con 3 formas de imprimir Tag:
Código C++:
Ver original
  1. #include <stdio.h>
  2.     #include <stdlib.h>
  3.      
  4.     class Network
  5.     {
  6.         public:
  7.             int Tag;
  8.            
  9.             Network(int tag);
  10.     };
  11.      
  12.     Network::Network(int tag)
  13.     {
  14.         Tag = tag;
  15.     }
  16.      
  17.     int main(void)
  18.     {
  19.         Network** net = new Network*[100];
  20.        
  21.         for (int i=0; i < 100; i++)
  22.             net[i] = new Network(i);
  23.                    
  24.         printf ("The value of net[3]->Tag = %d\n", (*(net+3))->Tag); // usando la aritmetica de punteros con "->"
  25.          printf ("The value of net[3]->Tag = %d\n", net[3]->Tag); // usando subindices con "->"
  26.         printf ("The value of net[3]->Tag = %d\n", (**(net+3)).Tag); //usando la aritmetica de punteros con "."
  27.      system("PAUSE");
  28.         return 0;
  29.     }


Saludos

PD: no es un tema facil comprender el uso de puntero a puntero sin un grafico; si encuentro algo lo subo