「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

構造体

pointこの用語のポイント

point変数の種類だよ

point中に入れられる物の形や数を自分で決められるよ

point要素ごとに型の違う配列みたいなものだよ

スポンサーリンク

簡単に書くよ

構造体(読:コウゾウタイ 英:structure)とは

プログラミングの話で出てくる「変数(値を入れておく箱)」の種類のひとつ
であり

中に入れられる物の種類や数を自分で決められるやつ
です。

ちょっと小難しい言い回しになりますが

自分で型(変数の種類)と要素数(配列の中にある変数の数)を決められる、要素(配列の中身)ごとの型が違う配列(複数の変数がくっついたもの)
と解釈しても かまいません。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として「変数」と「変数の型」について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

変数は「プログラミング言語における『値を入れておく箱』」です。
処理の途中で値を入れたり、逆に取り出したりできます。

構造体

変数の型は「この箱(変数)には、どんな種類の物を入れていいですよ」な決まりです。

構造体2

例えば、そうですね。
手ごろな大きさのダンボール箱が あったとしましょう。

構造体3

ピヨ太君がやってきて、その箱にマジックで大きく「食べ物用」と書きました。

構造体4

「食べ物用」と書いたので、このダンボールに入れていいのは食べ物だけです。
食べ物以外を入れようとすると、ピヨ太君にメッチャ怒られます。

構造体5

この話におけるダンボール箱が「変数」です。
マジックで書いた「食べ物用」が「変数の型」になります。

構造体6

変数の型には、いろいろな種類があります。
数字を入れられる箱、文字を入れられる箱、文字列を入れられる箱、いろいろです。

例えば「数字しか入れられませんよ」な箱には数字しか入りません。
文字を入れようとすると怒られます。

構造体7

「文字しか入れられませんよ」な箱には文字しか入りません。
数字を入れようとすると怒られます。

構造体8

以上を踏まえて

変数の型の種類のひとつで、中に入れられる物の種類や数を自分で決められるやつ

が「構造体」です。

例えば、そうですね。

ピヨ太君が「数字を2つと文字を1つ入れられる箱を使おう」と決めたとしましょう。

構造体9

でも、そんな箱は ありません。

構造体10

どうすれば良いでしょうか?

簡単です。

数字を入れられる箱を2つと文字を入れられる箱を1つ持ってきて、それを新しい大きな箱の中に入れてやれば良いのです。

構造体11

そうすると、新しい大きな箱は「数字を2つと文字を1つ入れられる箱」になります。

構造体12

実際には、数字は大きな箱の中にある「数字を入れられる箱」の中に入ります。

構造体13

文字は大きな箱の中にある「文字を入れられる箱」の中に入ります。

構造体14

とはいえ、ピヨ太君から見れば数字も文字も「大きな箱」の中に入れています。

構造体15

この話で出てきた大きな箱が構造体です。

構造体16

構造体の中身は自分で決められます。
今回のピヨ太君は「数字を2つと文字を1つ入れられる箱」を作りましたが「数字を3つと文字を5つ入れられる箱」でもいいですし、それ以外の形でも かまいません。
元々ある型の変数を寄せ集めて新しい型を作れるのが構造体の特徴です。

ここまでを踏まえて、もう少し実際のプログラミングに近い例で見てみましょう。

C言語を例に説明しますね。
構造体を使ったプログラムは、例えば以下のように書きます。

#include <stdio.h>

/* 構造体の宣言 */
struct piyo_kouzoutai {
    int num1;
    int num2;
    char str1[10];
}

void main() {
    /* 構造体の変数作成&初期化 */
    struct piyo_kouzoutai piyo_hensu1 = { 1, 2, "piyota" };

    /* 構造体の変数に値を入れる */
    piyo_hensu1.num1 = 10;
    piyo_hensu1.num2 = 20;
    piyo_hensu1.str1 = "piyota2";

}


おぉ、アルファベットがいっぱいですね。

まず

/* 構造体の宣言 */
struct piyo_kouzoutai {
    int num1;
    int num2;
    char str1[10];
}


の部分で構造体を宣言しています。
「中に何をどれだけ入れられる箱を新しく用意しますよ~」とコンピュータさんに伝える作業です。

今回は、中に

int型(数値型)の箱である「num1」
・int型(数値型)の箱である「num2」
char型(文字列型)の箱である「str1」


の3つの箱を入れた新しい大きな箱「piyo_kouzoutai」を作るね!と宣言しています。

ここで1つ注意事項です。
「piyo_kouzoutai」は箱の種類に付いた名前です。
実際の箱は、まだありません。

よく分からない方は設計図だと思ってください。
「piyo_kouzoutai」は箱の組み立て方設計図です。
実際の箱は、まだありません。

次に

    /* 構造体の変数作成&初期化 */
    struct piyo_kouzoutai piyo_hensu1 = { 1, 2, "piyota" };


を見てみましょう。

「piyo_kouzoutai」型の変数「piyo_hensu1」を作っている部分です。
ここでやっとこさ設計図から実際の箱が作られます。

これで、中に「num1」「num2」「str1」という箱の入った大きな箱「piyo_hensu1」が作られました。

あとは

    /* 構造体の変数に値を入れる */
    piyo_hensu1.num1 = 10;
    piyo_hensu1.num2 = 20;
    piyo_hensu1.str1 = "piyota2";


で、箱の中に値をポイポイ放り込んでいます。

構造体17

ポイントは、新しい大きな箱「piyo_hensu1」自体を指定して値を放り込むわけではないところです。
「piyo_hensu1」の中にある箱「num1」「num2」「str1」を指定して放り込みます。
例えば

    piyo_hensu1.num1 = 10;

は「piyo_hensu1」の中にある「num1」に「10」を入れてね、という命令です。

これが構造体です。

これで構造体の説明は一通り終わったのですが……何か気づきませんか?

あなたは構造体のお勉強をしているくらいなので、すでに「配列」を知っているのではないでしょうか。
配列は「変数を たくさん合体させた変数」です。
値を入れる箱が横にずらずら並んでいるイメージです。

構造体18

配列と構造体って似ていると思いませんか?

配列は同じ種類の箱が集まった物です。
数字を入れる箱だったら数字を入れる箱が複数集まって1つの配列になります。

構造体19

※プログラミング言語によっては、違う種類の値を入れられる場合も あります。

構造体は違う種類の箱が集まった物です。
いろいろな種類の箱が複数集まって1つの構造体になります。

構造体20

とはいえ、どちらも

値を入れる箱が複数集まったもの

です。

もちろん細かい使い方とかは違いますけどね。
箱の種類の違いを気にしなければ、配列と構造体は同じようなものです。
個人的には、構造体を

自分で型と要素の数を決められる、要素ごとの型が違う配列

と解釈しても良いと思っています。


image piyo2

一言でまとめるよ

まぁ「構造体」って単語が出てきたら「中に入れられる物の種類と数を自分で決められる、変数の型(変数の種類)なんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像023
書籍画像020

おまけ

■違いの分かるピヨピヨ





書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
エンジニア育成現場の「失敗」集めてみた。 42の失敗事例で学ぶマネジメントのうまい進めかた
ソフトウェア開発現場の「失敗」集めてみた。 42の失敗事例で学ぶチーム開発のうまい進めかた