「構造体の使い方について」の編集履歴(バックアップ)一覧はこちら
「構造体の使い方について」(2010/03/02 (火) 22:39:13) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*構造体について
この項目で学ぶこと
・&link_anchor(1){構造体とは}
・&link_anchor(2){構造体のアクセスの仕方}
・&link_anchor(3){ポインタを使った構造体のアクセスの仕方}
・&link_anchor(4){Cの構造体の宣言について}
・&link_anchor(5){サンプルソース}
**&aname(1,option=nolink){構造体とは}
構造体とは、複数の変数をまとめたものです。たとえば人のデータとして氏名、身長、体重が必要だったとします。構造体を用いるとこれらの変数をまとめることが出来ます。とりあえず使い方のサンプルソース見てください。
**&aname(2,option=nolink){構造体の使い方}
構造体は標準で定義されている構造体のほかに、自分で定義することが出来ます。ここでは自分で定義し、使用する方法の一例を紹介します。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;
}
.演算子を使ってアクセスする以外は普通の変数と同じです。
**&aname(3,option=nolink){ポインタを使った構造体のアクセスの仕方}
構造体をポインタで扱うときは->(アロー)演算子を使ってアクセスします。先ほどのソースの代入部分をポインタ構造体にしてみました。
#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;
}
**&aname(4,option=nolink){Cの構造体の宣言について}
二つ前のソースを書き換えてみました。構造体の宣言の仕方のみ違います。
#include<stdio.h>
#include<string.h>
struct SPerson{ // StructPersonの略。筆者の略し方。
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」とかで調べてください。
**&aname(5,option=nolink){サンプルソース}
*構造体について
この項目で学ぶこと
・&link_anchor(1){構造体とは}
・&link_anchor(2){構造体のアクセスの仕方}
・&link_anchor(3){ポインタを使った構造体のアクセスの仕方}
・&link_anchor(4){Cの構造体の宣言について}
・&link_anchor(5){サンプルソース}
*&aname(1,option=nolink){構造体とは}
''構造体とは複数の変数をまとめたものです''。たとえば人のデータとして氏名、身長、体重が必要だったとします。構造体を用いるとこれらの変数をまとめることが出来ます。
*&aname(2,option=nolink){構造体の使い方}
''構造体は標準で定義されている構造体のほかに、自分で定義することが出来ます''。ここでは自分で定義し、使用する方法の一例を紹介します。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;
}
''.演算子を使ってアクセスする以外は普通の変数と同じです''。
*&aname(3,option=nolink){ポインタを使った構造体のアクセスの仕方}
''構造体のポインタのメンバにアクセスするときは->(アロー)演算子を使います''。先ほどのソースの代入部分をポインタ構造体にしてみました。
#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;
}
*&aname(4,option=nolink){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」とかで調べてください。
*&aname(5,option=nolink){サンプルソース}
表示オプション
横に並べて表示:
変化行の前後のみ表示: