[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

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

構造体 (structure)

pointこの用語のポイント

point変数の型だよ

point変数を寄せ集めた変数だよ

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

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

スポンサーリンク

簡単に書くよ

構造体 (structure)とは

プログラミング言語における変数の型の1つで、中身の構造を自分で決められる型のこと。
もう少し噛み砕いて書くと

プログラミング言語における「その箱にはどんな種類の物を入れて良いか」な決まりの1つで、中に入れられる物の種類や数を自分で決められるやつのこと
です。
ちょっと小難しい言い回しですが

自分で型と要素数を決められる、要素ごとの型が違う配列
と解釈しても、かまいません。

image piyo

詳しく書くよ

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

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

構造体

プログラミング言語の種類にもよりますが、箱にはいくつかの種類があります。
そして、箱の種類によって、入れられる値の種類は決まっています。

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

構造体2

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

構造体3

このような「その箱には、どんな種類の値なら入れられるの?」な決まりを「変数の型」と言います。
例えば「数字しか入れられませんよ」な箱は「数値の変数」と言います。
「文字しか入れられませんよ」な箱は「文字列の変数」です。
他にも、いろいろな「○○しか入れられませんよ」な「○○型の変数」があります。

以上を踏まえて、変数の型の種類の1つで「中に入れられる物の種類や数を自分で決められるやつ」が「構造体」です。

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

構造体4

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

構造体5

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

簡単です。

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

構造体6

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

構造体7

数字は、大きな箱の中に入っている数字を入れられる2つの箱のどちらかに入れれば良いですし、文字は、大きな箱の中に入っている文字を入れられる箱に入れれば良いですからね。

この新しい大きな箱が構造体です。

構造体8

なお、構造体の中身は自分で決められます。
今回のピヨ太君は「数字を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";


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

構造体9

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

これが構造体です。

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

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

構造体10

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

どちらも値を入れる箱が複数集まったものです。
違いは、集まった箱の種類です。

配列は同じ種類の箱が集まった物です。
数字を入れる箱だったら数字を入れる箱が集まって1つの配列になっています。
※ただし、プログラミング言語によっては、違う種類の値を入れることができる場合もあります。

構造体11

それに対して、構造体は同じ種類の箱とは限りません。
違う種類の箱が集まって1つの構造体になる場合もあります。

構造体12

逆に言うと、集まった箱の種類の違いに目をつむれば、大した違いはありません。
もちろん細かい使い方とかは違いますけどね。
個人的には、構造体を「自分で型と要素の数を決められる、要素ごとの型が違う配列」と解釈しても良いと思っています。

image piyo2

一言でまとめるよ

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

一番上に戻るよ
スポンサーリンク