構造体とクラスへのポインタ

#include <iostream>
#include <string>

#define LEN(x) (sizeof(x)/sizeof(*x))

typedef struct { //無名構造体でtypedefすると便利
  int a;
  char name[10];
} t_Student; //t_ のように頭にPrefixをつけとくとクラスと構造体を混同せずに済みそう

t_Student st[] = {
  {1,"charley"},
  {2,"smith"},
};

class Test{
public:
  Test(); //コンストラクタもクラス内で定義しないといけない
  Test(int _a,char _name[]);
  int a;
  char name[10];
  void Disp();
};

Test::Test(){a=1;strcpy(name,"shohei");}; //デフォルトコンストラクタ
Test::Test(int _a,char _name[]){
  a = _a;
  strcpy(name,_name);
}

int main(void){
  Test t1;
  Test t2(2,"neo");
  printf("%s\n",t1.name);
  printf("%s\n",t2.name);

  Test *t1_ptr;
  t1_ptr = &t1; //構造体ポインタと違ってアドレス演算子が必要
  printf("%s\n",t1_ptr->name);

  t_Student *p_str;
  p_str = st; //構造体は配列のように扱えるのでアドレス演算子が要らない

  int i;
  for(i=0;i<LEN(st);i++){
    printf((p_str+i)->name);//構造体は配列のようだが配列ではないので[]演算子は使えない
    printf("\n");
  }

  return 0;
}