1.構造体とは
構造体とは任意の型の変数をまとめて管理できる型のこと言います。例をあげてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <stdio.h>; // 構造体タグ struct student { int number; int age; char sex; }; int main(void) { // 構造体 student型 の変数 takeshi の宣言と初期化 struct student takeshi = { 114514, '18', 'm' }; return 0; } |
ここで出てきた struct studentが構造体です。
main関数でstruct student takeshiと書いていますが、これはstudent型のtakeshiという変数を定義しています。
このように構造体を使うとtakeshi君の学籍番号と年齢と性別という情報を3つの変数としてバラバラに定義するのではなく、
student型のtakeshiという1つの変数で定義できます。
2.構造体のメンバーへアクセスする
次に、構造体のメンバーにアクセスする方法を紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// 構造体 student型 の変数 takeshi の宣言と初期化 struct student takeshi = { 114514, 18, 'm' }; takeshi.number = 1919; // .(ドット)を使ってアクセス struct student *takeshi_copy; // student型のポインタを生成 takeshi_copy = &takeshi; // takeshiのアドレスをtakeshi_copyに渡す (*takeshi_copy).age = 20; // ポインタを使ってアクセスすることもできる takeshi_copy -> sex = 'f'; // ポインタの時は -> を使ってもアクセスできる |
アクセスの仕方ですが通常は.(ドット)を用いて構造体のメンバーにアクセスします。
そしてポインタを使ってアクセスする場合は2通りあります。
一つ目は通常の場合と同様ドットを使ってアクセスする方法ですが、二つ目は”->”を使ってアクセスします。
これはアロー演算子と呼ばれており構造体のメンバを参照するための演算子です。
3.構造体の型名の簡略(structを省略)
ついでに構造体の型名を省略する方法についても述べておきます。
1 2 3 4 5 6 7 8 9 |
typedef struct people { // peopleは省略してもよい int number; int age; char sex; } student; student mako = {1002, 20, 'f'}; // structを省略できる |
構造体を宣言する時に”struct”を省略したい場合には”typedef”を使います。
ちょっと見慣れない書き方なので最初は覚えにくいかもしれません。
こうすることによって構造体を宣言する時に”student mako”というふうに宣言することができます。
4.構造体の配列
構造体は他の型と同様に、配列を使う事ができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <stdio.h>; // 構造体タグ struct student { char name[20]; int number; int age; char sex; }; int main(void) { // struct student型の group_1というグループを作りたいとき struct student group_1[5] = { {"hoge hoge", 1, 16, 'm'}, {"hoge hogechan", 1, 16, 'f'}, {"hoge hogetarou", 1, 16, 'm'}, {"fuga hoge", 1, 16, 'm'}, {"fugahoge fugako", 1, 16, 'f'} }; return 0; } |
“struct student group_1[5]”みたいな感じで宣言します。
今までのintとかcharとかの配列と宣言の仕方は一緒ですね。
型名 +配列で宣言することができます。