C の構造体

C の構造体

C 配列を使用すると、同じ型のデータ項目を格納できる変数を定義できます。構造体は、C プログラミングで使用できる別のユーザー定義データ型であり、異なる型のデータ項目を格納できます。

構造体のデータ メンバーは、基本データ型 (int、float、char など)、またはその他の構造体型、ポインター型などです。

レコードを表すために構造が使用されます。図書館での本の活動を追跡するとします。各本の次のプロパティを追跡する必要がある場合があります。

  • タイトル
  • 著者
  • 主題
  • ブック ID

構造を定義する

構造体定義は、キーワード struct と構造体名で構成され、構造体名は必要に応じて定義できます。

構造体ステートメントは、複数のメンバーを含む新しいデータ型を定義します。構造体ステートメントの形式は次のとおりです:

struct tag { 
    member-list
    member-list 
    member-list  
    ...
} variable-list ;

tag は構造タグです。

member-list は、int i; や float f; などの標準変数定義、またはその他の有効な変数定義です。

variable-list 構造体変数は、構造体の最後で定義され、最後のセミコロンの前に、1 つ以上の構造体変数を指定できます。Book 構造体の宣言方法は次のとおりです。

struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;

上記の宣言では、1 番目と 2 番目の宣言はコンパイラによってまったく異なる 2 つの型と見なされます。メンバー リストが同じであっても、t3=&s1 の場合は不正です。

構造体のメンバーには、他の構造体を含めることができ、独自の構造体型へのポインターを含めることもできます。通常、このポインターの用途は、リンクされたリストやツリーなどのより高度なデータ構造を実装することです。

構造体変数の初期化

他のタイプの変数と同様に、構造体変数を定義するときに初期値を指定できます。

構造体メンバーへのアクセス

構造体のメンバーにアクセスするには、メンバー アクセス演算子 (.) を使用します。メンバー アクセス演算子は、構造体変数名とアクセスしたい構造体メンバーの間のピリオドです。struct キーワードを使用して、構造体型の変数を定義できます。

例を挙げて、構造の定義と使用法を見てみましょう。平面上の点は、x 軸の座標と y 軸の座標によって決定されることがわかっているため、プログラムで平面上の点を記述したい場合は、2 つの属性変数 x を定義する必要があります。たとえば、この点と y の

ここに画像の説明を挿入

float point0_x = 1;
float point0_y = 3;
float point1_x = 2;
float point1_y = 4;

このような座標点の場合、点に関連する変数の x と y は常にペアで表示されます。つまり、平面内の点の座標には、x と y の 2 つの属性が必要です。したがって、これらの 2 つの属性 (2 つの変数) を構造体として定義できます。その名前は、ポイントと呼ばれる平面内の点の座標変数と呼ばれます。

struct point
{
    float x;
    float y;
};

このように、「ポイント型」と呼ばれる変数型があります。つまり、この変数型が定義されている限り、この型の変数は 2 つの属性 (x と y) を持つことになります。次に、このタイプを使用して 2 つのポイント p0 と p1 を定義できます。

struct point p0;
struct point p1;
p0.x = 1;
p0.y = 2;
p1.x = 3;
p1.y = 1;

構造の入れ子

上記で平面上の 2 点の座標を定義し、次に平面上の 2 点の座標を取得します. これらの点を使用して、点の構造に応じて、rectangle と呼ばれる新しい変数型を定義できます. : struct rect.

ここに画像の説明を挿入
ポイント構造がネストされた長方形構造を定義しましょう。使用方法は通常の構造と一致しています。最初にこの例を見て、長方形の面積を計算する関数を書きましょう:

#include <stdio.h>
#include <math.h>
struct point
{
    float x;
    float y;
};
struct rect
{
    struct point p0;
    struct point p1;
};
float area_of_rect(struct rect r)
{
    return fabs(r.p1.x - r.p0.x) * fabs(r.p1.y - r.p0.y);
}
int main(int argc, char *argv[])
{
    struct rect r;
    r.p0.x = 1;
    r.p0.y = 2;
    r.p1.x = 3;
    r.p1.y = 1;
    printf("%f\n", area_of_rect(r));
    return 0;
}

簡易定義

もちろん、ここでは構造体変数を定義し、それを関数の入力パラメーターとして使用します。次のセクションでは、関数のパラメーターと関数の戻り値としての構造体について学習します。さらに、構造体を定義するとき、定義の直後にこの構造体型の変数を定義することもできます。

typedef struct student
{
    int id;
    int age;
    char name[10];
} zhangs,lis,wangw;

このように、student という構造体型を定義し、student 型の 3 つの変数 zhangs、lis、wangw を直接定義します。

さらに、構造体変数を使用する場合、常に構造体名 var の形式を使用する必要があり、これは多かれ少なかれ面倒です。プログラムをより簡潔にするために、typedef キーワードを使用して構造体型を再定義できます。例えば:

typedef struct student
{
    int id;
    int age;
    char name[10];
} stu;
stu s0;
stu s1;
stu s2;

このように struct student という構造体を定義し、typedef を介して stu 型として再定義し、stu を介してこの構造体型変数を定義することができます。プログラムで stu を使用すると、struct stuent を意味します。これははるかに単純ですが、注意してください。 used 中括弧の末尾の後のテキストは、この構造体の変数が定義されていることを意味します。

おすすめ

転載: blog.csdn.net/QYgujingjing/article/details/129920891