不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

paizaラーニング『C言語入門編8: 構造体を理解しよう (全9回) 』を受講してみた

2021-02-06 23:24:24 | paiza

『C言語入門編8: 構造体を理解しよう (全9回) 』


メモ

#01:構造体について学習しよう

  • 構造体とは
    構造体は、変数をひとまとまりにしたもの
    ・配列と違って、データ型が異なる変数も一緒にまとめることができる
    ・構造体の持つそれぞれの変数は「メンバ」と呼ばれる
  • 構造体を使用するメリット
    • 関連のあるデータをまとめることができる
      コードの見通しがよくなり、無関係な値を変更してしまうリスクを減らすことができる
    • 一度宣言した構造体は何度でも利用できる
      構造体のメンバを宣言しなおす必要がない。
      そのため、効率よくコードを作成できる。
  • オブジェクト指向言語の「クラス」との違い
    • Java や C# などのオブジェクト指向言語には「クラス」がある。
      ⇔ C 言語には、クラスの機能がない。
    • C 言語の構造体は、クラスの機能を限定したものと考えることもできるが、大きな違いとして、
      クラスでは「メソッド」というオブジェクトの操作を記述できるが、
      C 言語の構造体ではメソッドを記述できない。

#02:構造体を作成しよう

  • 構造体を宣言する

    struct 構造体タグ {
     メンバ 1;
     メンバ 2;
     ...
    };
    • 最後の ; (セミコロン) を忘れてしまうことが多いので注意

#03:構造体を扱うときに便利な機能を使ってみよう

  • 構造体のメンバに strcpy を使う
    構造体のメンバが文字列のときは、 strcpy を使ってコピーできる。
  • typedef を使うとデータ型に名前をつけることができる。

    typedef データ型 新しい名前;
  • 構造体宣言で typedef を使う

    typedef struct {
     char name[20];
     int hp;
     int power;
    } Player;

#04:構造体を使った関数をつくろう

  • 構造体を引数で受け取る関数
    構造体から宣言した変数は、通常の変数と同じように、関数の引数で渡すことができる。
    • ※ 関数の引数で構造体を渡す場合、値のコピーが渡されまので、構造体のサイズが大きいと (構造体のメンバにある配列が大きいなど) コピーに時間がかかってしまう。
      → そのようなときに、構造体へのポインタを渡す方法が推奨される
  • 構造体を作成して返す関数
    構造体は、直接代入ができるデータ型なので、関数の戻り値にすることができる。
    一方で配列は、値を直接代入できず、関数の戻り値にすることができない。

#06:構造体とポインタ

  • アロー演算子
    • 構造体へのポインタを使ってメンバを書き換えるには、次のように記述する
       (*p).hp = 200;
    • これは、「アロー演算子」を使って以下のように書くことができます。
       p->hp = 200;

#07:構造体でつくる連結リストを理解しよう

  • 連結リスト
    連結リストは、「ノード」と呼ばれる各要素をつなげてできたデータ構造
    • 配列と違ってインデックスが定められておらず、
      データの追加や順番の変更が簡単にできるのが特徴。
    • 連結リストでは、要素数も自由に変更できる。
  • 連結リストの実装方法
    連結リストのノードは、構造体とポインタを使って実装することが多い。
    • 構造体は、異なる型の値を保持できるため、ノードの実装に適している

      struct node {
       int num; // 整数値データ
       struct node *next; // 次のノードへのポインタ
      };
  • 連結リストの種類
    • 単方向リスト
      次のノードにしか移動できない連結リスト
    • 双方向リスト
      前のノードと次のノードに移動できる連結リスト
    • 線形リスト
      ノードが直線状に並ぶ連結リスト
    • 循環リスト
      最後のノードが最初のノードにつながっている連結リスト

#08:連結リストを実装しよう (1)

  • 構造体のメンバに、自身の構造体へのポインタを持つ構造体は「自己参照構造体」と呼ばれる。
    struct node {
     int num;
     struct node *next; // 自身の構造体へのポインタ
    };

認定証

連結リストってどこかでやった気もするけど、
本レッスンのおかげで理解が深まったと思う。


学習ステータス

まだ昇格しないっ!?
ずっと若手のままか😁 


最新の画像もっと見る

コメントを投稿