この文書の現在のバージョンと選択したバージョンの差分を表示します。
構造体_共用体_ビットフィールドの活用 [2011/11/29 19:46] member |
構造体_共用体_ビットフィールドの活用 [2011/12/01 22:05] (現在) member |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== 構造体_共用体_ビットフィールドの活用 ====== | + | ====== 構造体 ====== |
構造体、共用体、ビットフィールドを使うと変数の管理が格段楽になり、ソースが見やすくなります。C言語を使う中でぜひマスターしてほしい項目だと思います。難しいと思っている人も多いようですが、フォーマットさえわかればそれをコピペでもして、使えると思います。 | 構造体、共用体、ビットフィールドを使うと変数の管理が格段楽になり、ソースが見やすくなります。C言語を使う中でぜひマスターしてほしい項目だと思います。難しいと思っている人も多いようですが、フォーマットさえわかればそれをコピペでもして、使えると思います。 | ||
ライン 9: | ライン 9: | ||
構造体を使うと変数を階層化することができます。イメージとしては下のような具体例を考えるといいと思います。 | 構造体を使うと変数を階層化することができます。イメージとしては下のような具体例を考えるといいと思います。 | ||
- | 米という共通の属性をもつものがあるとします。コシヒカリと、ササニシキと、ヒトメボレと、あきたこまちとでもしときましょう。この時に別々に4種の銘柄を考えるのではなく\\ | + | 米という共通の属性をもつものがあるとします。コシヒカリと、ササニシキと、ヒトメボレと、あきたこまちとでもしときましょう。この時に別々に4種の銘柄を考えるのではなく |
米.コシヒカリ | 米.コシヒカリ | ||
ライン 18: | ライン 18: | ||
といったように米というなかの中の何かと考えるとわかりやすいですよね。 | といったように米というなかの中の何かと考えるとわかりやすいですよね。 | ||
- | さらに同じコシヒカリでも産地が違ったりしますよね。そういう時は\\ | + | さらに同じコシヒカリでも産地が違ったりしますよね。そういう時は |
コシヒカリ.新潟県 | コシヒカリ.新潟県 | ||
ライン 24: | ライン 24: | ||
コシヒカリ.北海道 | コシヒカリ.北海道 | ||
- | みたいにして区別できます。ここでコシヒカリはひとつ上の階層では米でしたから、\\ | + | みたいにして区別できます。ここでコシヒカリはひとつ上の階層では米でしたから、 |
米.コシヒカリ.新潟県 | 米.コシヒカリ.新潟県 | ||
ライン 32: | ライン 32: | ||
となります。つまり、入れ子構造ですね。 | となります。つまり、入れ子構造ですね。 | ||
- | 構造体というのは今の例のように変数名を入れ子構造にして管理しようという概念です。さて、実際の文法をみていきましょう。ここでは詳しくはかかないので適当にこの表現を真似するなりしてください。 | + | 構造体というのは今の例のように変数名を入れ子構造にして管理しようという概念です。さて、実際の文法をみていきましょう。ここでは詳しくはかかないので適当にこの表現を真似するなりしてください。\\ |
- | + | <code c> | |
- | + | typedef struct{ //これが構造体の型宣言する部分 | |
- | + | struct{ | |
- | + | char niigataken; | |
- | + | char akitaken; | |
- | + | char hokkaidou; | |
- | + | }koshihikari //koshihikariという構造体を入れ子にしている | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
+ | int sasanishiki; //型の違う変数もまとめて扱える | ||
+ | float hitomebore; | ||
+ | unsigned char akitakomachi; | ||
+ | char komekome_club[20]; //構造体の中で配列も宣言できる。 | ||
+ | |||
+ | } kome_t //kome_tが構造体の型名 | ||
+ | |||
+ | kome_t kome_data_1; //ここが構造体変数の宣言 | ||
+ | kome_t kome_data_2; | ||
+ | kome_t kome_data_array[100] //構造体の配列も作ることができる | ||
+ | kome_data_1.sasanisiki = 15; //構造体の変数に値を代入 | ||
+ | kome_data_2.koshihikari.niigataken = 55; | ||
+ | kome_data_1.komekome_club[10] = 12; //構造体の中の配列に値を代入 | ||
+ | kome_data_array[35].koshihikari.hokkaidou //構造体の配列に値を代入 | ||
+ | |||
+ | kome_data_1 = kome_data_2; //同じ型の構造体同士は値の代入ができる。 | ||
+ | |||
+ | </code> | ||
+ | こんな感じで、使ってみてください。structの前についているtypedefはまあ、気になるんだったら調べてください。共用体、ビットフィールドについては次のページで説明します。 | ||