/* OH-CVO, feb 2002-2003 Progr4 :: Pointers2 */


#include <iostream>
using namespace std; 

struct Rec_1 {
  int v;
  int w;
}; 

typedef Rec_1* RecPtr_1; 

struct Rec_2 {
  int   x;
  char  y;
  char *z;
}; 

typedef Rec_2* RecPtr_2; 

struct Rec_3 {
  int   a;
  Rec_1 ra;
}; 

struct Rec_4 {
  int       b;
  RecPtr_2 *rb;
}; 

int main()
{
  int i=0;

  cout << "Rec_1    " << sizeof(Rec_1) << endl;
  cout << "Rec_2    " << sizeof(Rec_2) << endl;
  cout << "Rec_3    " << sizeof(Rec_3) << endl;
  cout << "Rec_4    " << sizeof(Rec_4) << endl;
  cout << "RecPtr_1 " << sizeof(RecPtr_1) << endl;
  cout << "RecPtr_2 " << sizeof(RecPtr_2) << endl; 
  
  int      *a = new int(3);
  *a = 1;  
  int      *b = new int[3];

  for ( i=0 ; i<3 ; i++ )
     b[i] = i+1;   
     
  Rec_1    *c = new Rec_1[3];
  for ( i=0 ; i<3 ; i++ ) {
     c[i].v = i+1;
     c[i].w = c[i].v * c[i].v;
  }   
  
  Rec_1 **d = new Rec_1*[3];
  for ( i=0 ; i<3 ; i++ )
     d[i] = new Rec_1;
  for ( i=0 ; i<3 ; i++ ) {
     d[i]->v = i+1;
     d[i]->w = d[i]->v * d[i]->v;
  }   
  
  RecPtr_1 *e = new RecPtr_1[3];
  for ( i=0 ; i<3 ; i++ )
     e[i] = new Rec_1;
  for ( i=0 ; i<3 ; i++ ) {
     e[i]->v = i+1;
     e[i]->w = e[i]->v * e[i]->v;
  }   
  
  
  Rec_2    *f = new Rec_2;
  f->x = 1;
  f->y = 1;
  f->z = new char[10];   
  
  Rec_3    *g = new Rec_3;   
    
  Rec_4    *h = new Rec_4;
  h->b = 3; 
  h->rb = new RecPtr_2[3];

  for ( i=0 ; i<3 ; i++ ) {
     h->rb[i] = new Rec_2[2];
  }   
  
  /* (1) maak een tekening van alle bovenstaande structuren */

  /* (2) schrijf hier de v en w waarden van de resp. structuren uit op het scherm */

  // ...

  /* (3) vernietig hier alle arrays en structuren */

  // ...

  return 0;
}