構造体について
この項目で学ぶこと
構造体とは
構造体とは複数の変数をまとめたものです。たとえば人のデータとして氏名、身長、体重が必要だったとします。構造体を用いるとこれらの変数をまとめることが出来ます。
構造体の使い方
構造体は標準で定義されている構造体のほかに、自分で定義することが出来ます。ここでは自分で定義し、使用する方法の一例を紹介します。C++からサポートされた記述の仕方になりますが、最近のコンパイラはほとんどC++に対応しているのでエラーは出ないと思います。
構造体の定義は関数の外に以下のように記述します。
構造体の定義は関数の外に以下のように記述します。
struct 構造体タグ名{ データ型 変数名; データ型 変数名; ... };
構造体内に定義された変数はメンバ変数といいます。メンバ変数の型はばらばらのものでかまいません。今回の例では氏名はchar型、身長、体重はdouble型で用意します。用意された構造体は次のようにして宣言します。
構造体タグ名 構造体名
このように普通の変数のように宣言することが出来ます。メンバ変数にアクセスするときは.(ドット)演算子を使用します。使い方はサンプルソースを見てください。
コケいろさんのデータ。もちろん数字は適当。
#include<stdio.h> #include<string.h> struct SPerson{ // StructPersonの略。筆者の略し方。 char Name[32]; double Height,Weight; }; int main(){ SPerson Kokeiro; strcpy(Kokeiro.Name,"コケいろ\0"); Kokeiro.Height = 180.; Kokeiro.Weight = 70.; printf("氏名 \t\t 身長 \t 体重 \n"); printf("%s \t %.1f \t %.1f \n",Kokeiro.Name,Kokeiro.Height,Kokeiro.Weight); return 0; }
.演算子を使ってアクセスする以外は普通の変数と同じです。
ポインタを使った構造体のアクセスの仕方
構造体のポインタのメンバにアクセスするときは->(アロー)演算子を使います。先ほどのソースの代入部分をポインタ構造体にしてみました。
#include<stdio.h> #include<string.h> struct SPerson{ // StructPersonの略。筆者の略し方。 char Name[32]; double Height,Weight; }; int main(){ SPerson Kokeiro; SPerson *PKokeiro = &Kokeiro; // pはポインタの頭文字 strcpy(PKokeiro->Name,"コケいろ\0"); PKokeiro->Height = 180.; PKokeiro->Weight = 70.; printf("氏名 \t\t 身長 \t 体重 \n"); printf("%s \t %.1f \t %.1f \n",Kokeiro.Name,Kokeiro.Height,Kokeiro.Weight); return 0; }
Cの構造体の宣言について
二つ前のソースを書き換えてみました。構造体の宣言の仕方のみ違います。
#include<stdio.h> #include<string.h> struct SPerson{ char Name[32]; double Height,Weight; }; int main(){ struct SPerson Kokeiro; // 構造体タグ名の前にstructが必要 strcpy(Kokeiro.Name,"コケいろ\0"); // 後の使い方は一緒。 Kokeiro.Height = 180.; Kokeiro.Weight = 70.; printf("氏名 \t\t 身長 \t 体重 \n"); printf("%s \t %.1f \t %.1f \n",Kokeiro.Name,Kokeiro.Height,Kokeiro.Weight); return 0; }
C言語にはstructを書かなくてすむようにする方法もありますがC++の方法を知っていれば十分なので紹介しません。気になるようであれば「typedef」とかで調べてください。