C言語 構造体のポインタとは? struct

今回は、構造体のポインタを使ってみましょう。

#include <stdio.h>
#include <string.h>

/* 構造体hitoを定義 */
struct hito {
      int age;     /* 年齢 */
      char blood[3];  /* 血液型 */
};

void main(void) {

      /* hito型変数masasiを宣言 */
      struct hito masasi;

      /* hito型構造体のポインタ変数pを宣言 */
      struct hito* p;

      /* 構造体masasiの先頭アドレスをポインタ変数pに代入 */
      p = &masasi;

      /* まさし君のプロフィールを設定 */
      p->age = 10;
      strcpy(p->blood, "A");

      /* 年齢、血液型表示 */
      printf("まさしくんのプロフィール\n");
      printf("年齢:%d歳\n", p->age);
      printf("血液型:%s型\n", p->blood);

}

プログラムを実行すると以下のようになります。

まずは、構造体hito型のポインタを宣言します。

/* hito型構造体のポインタ変数pを宣言 */
      struct hito* p;

続いて構造体masasiの先頭アドレスをpに代入します。

/* 構造体masasiの先頭アドレスをポインタ変数pに代入 */
      p = &masasi;

そして、pが指す値、
つまり構造体masasiの年齢、血液型を代入しています。

/* まさし君のプロフィールを設定 */
      p->age = 10;
      strcpy(p->blood, "A");

通常の構造体であれば、要素にアクセスするのにドットを使いましたが、
構造体のポインタは、構造体の先頭アドレスが入っていれば
その構造体の全要素に->アロー演算子でアクセス可能となります。