構造体について
この項目で学ぶこと
構造体とは
構造体とは複数の変数をまとめたものです。たとえば人のデータとして氏名、身長、体重が必要だったとします。構造体を用いるとこれらの変数をまとめることが出来ます。
構造体の使い方
構造体は標準で定義されている構造体のほかに、自分で定義することが出来ます。ここでは自分で定義し、使用する方法の一例を紹介します。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」とかで調べてください。