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:
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).
Tambien podes usar el "." pero tenes que acceder al objeto, osea
Basta de palabras, te dejo el codigo sin usar malloc y funcionando con 3 formas de imprimir Tag:
Código C++:
Ver original#include <stdio.h>
#include <stdlib.h>
class Network
{
public:
int Tag;
Network(int tag);
};
Network::Network(int tag)
{
Tag = tag;
}
int main(void)
{
Network** net = new Network*[100];
for (int i=0; i < 100; i++)
net[i] = new Network(i);
printf ("The value of net[3]->Tag = %d\n", (*(net
+3))->Tag
); // usando la aritmetica de punteros con "->" printf ("The value of net[3]->Tag = %d\n", net
[3]->Tag
); // usando subindices con "->" printf ("The value of net[3]->Tag = %d\n", (**(net
+3)).
Tag); //usando la aritmetica de punteros con "." return 0;
}
Saludos
PD: no es un tema facil comprender el uso de puntero a puntero sin un grafico; si encuentro algo lo subo