学生向けプログラミング入門

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails

C++プログラミング入門その24 構造体(2020年4月更新)

<<前  [TOP]  次>>


Visual Studioで新規プロジェクトを作り、以下のcppファイルを作成して下さい。


【Kouzoutai1.cpp】

#include <iostream>

struct gakuseki {

	char name[12];
	char nen[5];
	char number[5];
	char gakka[6];
	char kumi[3];
};

struct gakuseki seito = {"山田 太郎", "2005", "021", "医学", "10"};

int main() {

	std::cout << "名前:" << seito.name << std::endl;
	std::cout << "入学年度:" << seito.nen << std::endl;
	std::cout << "番号:" << seito.number << std::endl;
	std::cout << "学科:" << seito.gakka << std::endl;
	std::cout << "組:" << seito.kumi << std::endl;
}



自分の名前(ローマ字)、入学年度、番号、学科(ローマ字)、組を格納する構造体を宣言して初期化したプログラムです。


構造体とは複数の型を集めた新しい型のことです。
構造体の宣言は以下のように行います。

struct 構造体名 {

     型 メンバー1;
     型 メンバー2;
     ・・・・
     型 メンバーn;

}変数名, 変数名,・・・;



構造体であることは最初に structを書くことによって示します。
structの後ろの「構造体名」が新しい型の名前になります。
{}の中にメンバーと呼ばれるいろいろな型のデータを格納します。
「”}”」で構造体の宣言は終わり、その後に変数名を書けばその構造体型の変数が確保されます。

例
     struct pen {
        char color;
        int futosa;
    }pen1,pen2;



例では構造体penが宣言されています。
構造体penは文字型変数と整数型変数をメンバーに持ち、メンバーを区別するためにそれぞれ、color、futosaというメンバー名をつけています。
最後に構造体penの変数としてpen1、pen2という名前の変数を確保しています。


構造体penの変数は次のように後で宣言することもできます。

struct pen {
    char color;
    int futosa;
};

struct pen pen1, pen2;



構造体の演算には、メンバーへのアクセスと代入があります。

例
     struct point {
        float x;
        float y;
    }p1, p2;

    p1.x = 1.0;
    p1.y = 2.0;
    p2 = p1;

構造体変数のメンバーにアクセスするには変数名の後ろにドットを置き、その後ろにメンバー名を書きます。
「p1.x」は構造体変数p1のメンバーxという意味である。
従って例は構造体変数p1のメンバーxに1.0を代入し、次にメンバーyに2.0を代入しています。
さらに次の行で構造体変数p2にp1を一括代入しています。
これによりp2.xは1.0、p2.yは2.0になります。


構造体は常に初期化を変数確保と同時に行うことができます。
ただし対応する型に応じた形式で処理しなければならない点に注意してください。

例
     struct pen {
        char color;
        int futosa;
    };

    struct point pen1 = { 'b', 2 };



また次の例のように構造体の宣言、確保、初期化を同時に行うこともできます。

例
     struct pen {
        char color[10];
        int futosa;
    }pen1 = { "black", 2 };



サンプルプログラムをビルドして実行してみましょう。


Kouzoutai1.cpp実行結果
Kouzoutai1.cpp実行結果


Visual Studioで新規プロジェクトを作り、以下のcppファイルを作成して下さい。


【Kouzoutai2.cpp】

#include <iostream>

struct gakuseki {

        char name[30];
        char nen[5];
        char number[10];
        char gakka[30];
        char kumi[30];
};

struct gakuseki meibo(void) { 

	struct gakuseki seito = {"山田 太郎", "2005", "010", "医学", "10"};
	return seito;
}


int main() {

	struct gakuseki gakusei1;

	gakusei1 = meibo();

        std::cout << "名前:" << gakusei1.name << std::endl;
		std::cout << "入学年度:" << gakusei1.nen << std::endl;
		std::cout << "番号:" << gakusei1.number << std::endl;
		std::cout << "学科:" << gakusei1.gakka << std::endl;
		std::cout << "組:" << gakusei1.kumi << std::endl;
}



先ほどのサンプルプログラム「Kouzoutai1.cpp」を構造体型の関数で書き換えたプログラムです。
動作は前と同じです。

例
     struct point {
        float x;
        float y;
    };

    struct point init( void ) {
        struct point p;
        p.x = 0.0;
        p.y = 0.0;
        return p;
    }

    int main() {
        struct point p1, p2;

        p1 = init();
        p2 = init();
    }

この例は関数でいくつかの値を返すために一つの方法を示しています。
関数 initは引数なしで返り値の方は構造体point であるので、x座標とy座標の2つの値を返すことができます。
実際には関数の中で(x,y)座標を原点に設定しているだけです。
関数initは構造体point型の関数なので、それを直接構造体pointの変数p1,p2へと代入できます。
このように関数の型と構造体の一括代入を使えば、関数と複数の値をやりとりすることができます。


サンプルプログラムをビルドして実行してみましょう。
「Kouzoutai1.cpp」と同じ結果になります。


<<前  [TOP]  次>>