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

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

C++プログラミング入門その24 構造体

<<前  [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"};

void 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 };



サンプルプログラムをビルドしてデバッグしてみましょう。





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;
}


void 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;
}



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

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

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

    void main() {
        struct point p1, p2;

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

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





<<前  [TOP]  次>>