C言語--構造体

2658 ワード

構造体は、異なるデータ型で組織されたデータ型であるため、1つの構造体に複数のデータ項目があり、各データ項目のタイプが異なる場合がある.
一、構造体の説明及び変数の定義
1.構造体タイプの説明
構造体タイプはC言語で提供される標準タイプではないため、構造体タイプを使用できるようにするには、まず構造体タイプ、構造体タイプを構成するデータ項目(メンバーとも呼ばれる)、および各メンバーのタイプを説明する必要があります.説明形式は次のとおりです.
struct構造体名
       {
データ型メンバー1;
 
データ型メンバーn;
};
ここでstructはキーワードであり、その後は構造体タイプ名であり、両者は共に構造体データ型の識別子を構成する.構造体のすべてのメンバーは、次の形式で1対のカッコ内に配置する必要があります.
データ型メンバー名;
同じ構造体内の異なるメンバーは同じ名前を使用できませんが、異なる構造体タイプのメンバー名は同じです.かっこの後ろのセミコロン";"省略できません.次のようになります.
     struct  person
{
      char  name[10];
      char  sex;
   int   age;
   int   stature;
};
ここでは、4つのメンバーからなる構造体タイプpersonを定義します.
注意:
Structure Type Descriptionでは、Structure Typeのメンバーのみを記述し、スペースを割り当てないデータ型を説明します.説明した構造体タイプを使用するには、スペースを割り当てるには、対応する変数を定義する必要があります.
2.構造体変数の定義
構造体変数の定義には、次の形式があります.
構造体タイプの説明は定義から離れています.たとえばstruct personを説明した後、対応する変数を定義できます.
      struct  person  p1, p2;
2つのstruct person変数が定義され、各変数は構造タイプのメンバー別に対応する空間を割り当て、各構造体変数に割り当てられた空間はすべてのメンバーの占有空間の和である.p 1,p 2が占有する空間はいずれも15 byteである.
構造体タイプを説明しながら、対応する変数を定義します.次のようになります.
struct   teacher
  {
  int number;
 char  name[10];
 char  sex;
 char  profession[6];
}t1, t2;
struct teacherタイプを説明するとともに、対応する2つの変数t 1,t 2が定義される.
構造体タイプ名なしで構造体変数を直接定義します.次のようになります.
struct
 {
  int  No;
  char name[10];
  char sex;
  int  age;
}s1, s2;
2つの構造体変数s 1、s 2を定義します.4つのメンバーがあり、各変数は15 byteを占有しますが、2つ目の方法とは異なり、構造体名が与えられていないため、他の場所でこの構造体タイプを再使用して別の変数を定義することはできません.
3.構造体定義のネスト
構造体タイプのメンバーは、基本データ型に加えて、上記の例で配列をメンバーとして使用したような他のタイプであってもよい.もちろん、1つの構造体タイプのメンバーは、構造体のネストと呼ばれる別の構造体タイプであってもよい.
例:struct date
      {
  int  year;
  int  month;
  int  day;
};
        struct  student
         {
  int  no;
  char name[10];
  char  sex;
  struct  date  birthday;
};
構造体struct studentのメンバーbirthdayは、別の構造体struct dateタイプです.
次に例を示します.
#include <iostream>
using namespace std;

int main(void)
{
	typedef struct birthday 
	{
		int year;
		int month;
		int day;
	};

	typedef struct person
	{
		char* name;
		birthday birth;
	};

	person ps;

	ps.name = new char[20];
	strcpy(ps.name, "BruceZhang");
	ps.birth.year = 1990;
	ps.birth.month = 9;
	ps.birth.day = 24;

	cout<<"name:"<<ps.name<<endl;
	cout<<"birthday"<<endl;
	cout<<ps.birth.year<<"."<<ps.birth.month<<"."<<ps.birth.day<<endl;

	system("pause");
	return 0;
}