Cprogramming-c-structures
C-構造
配列を使用すると、同じ種類の複数のデータ項目を保持できる変数のタイプを定義できます。 同様に、 structure は、Cで使用可能な別のユーザー定義のデータ型であり、異なる種類のデータ項目を組み合わせることができます。
構造は、レコードを表すために使用されます。 図書館で本を追跡したいとします。 あなたは、各本に関する次の属性を追跡することができます-
- タイトル
- 著者
- 件名
- ブックID
構造の定義
構造を定義するには、 struct ステートメントを使用する必要があります。 structステートメントは、複数のメンバーを持つ新しいデータ型を定義します。 構造体ステートメントの形式は次のとおりです-
- 構造タグ*はオプションであり、各メンバー定義はint iなどの通常の変数定義です。またはfloat f;または他の有効な変数定義。 構造の定義の最後で、最後のセミコロンの前に、1つ以上の構造変数を指定できますが、これはオプションです。 ここにあなたが本の構造を宣言する方法があります-
構造体メンバーへのアクセス
構造体のメンバーにアクセスするには、* memberアクセス演算子(。)を使用します。 メンバーアクセス演算子は、構造変数名とアクセスする構造メンバーの間のピリオドとしてコーディングされます。 キーワード *struct を使用して、構造タイプの変数を定義します。 次の例は、プログラムで構造を使用する方法を示しています-
上記のコードをコンパイルして実行すると、次の結果が生成されます-
関数の引数としての構造
他の変数またはポインターを渡すのと同じ方法で、構造体を関数の引数として渡すことができます。
上記のコードをコンパイルして実行すると、次の結果が生成されます-
構造体へのポインター
あなたは他の変数へのポインタを定義するのと同じ方法で構造体へのポインタを定義することができます-
これで、上記で定義したポインター変数に構造変数のアドレスを保存できます。 構造変数のアドレスを見つけるには、「&amp」を配置します。次のように構造体の名前の前に演算子-
その構造へのポインタを使用して構造のメンバーにアクセスするには、次のように→演算子を使用する必要があります-
構造体ポインターを使用して上記の例を書き直しましょう。
上記のコードをコンパイルして実行すると、次の結果が生成されます-
ビットフィールド
ビットフィールドを使用すると、構造体にデータをパックできます。 これは、メモリまたはデータストレージが貴重な場合に特に便利です。 典型的な例を含める-
- 複数のオブジェクトを機械語にパックします。 e.g. 1ビットフラグは圧縮できます。
- 外部ファイル形式の読み取り-非標準のファイル形式は、たとえば9ビット整数で読み取ることができます。
Cでは、変数の後に:bit lengthを追加することにより、構造定義でこれを行うことができます。 たとえば-
ここで、packed_structには6つのメンバーが含まれます。4つの1ビットフラグf1..f3、4ビットタイプ、9ビットmy_intです。
Cは、フィールドの最大長がコンピュータの整数ワード長以下である場合、上記のビットフィールドを可能な限りコンパクトに自動的にパックします。 そうでない場合、一部のコンパイラはフィールドのメモリオーバーラップを許可し、他のコンパイラは次のワードの次のフィールドを保存します。