構造
C言語は、ユーザーが自身のデータの異なるタイプからなるタイプの組み合わせからなるデータ構造を作成することができ、それは構造と呼ばれ
構造のタイプの文の一般的な形式:
構造体struct {名}平板状部材と
学生のstruct { NUM INT; ;チャー名[20である] ; CHARセックス INT年齢; }; ブレース構造の子が含まれている、構造体のメンバと呼ばれる、上記NUM、名前、性別、年齢でありますそれはメンバーです。 各メンバーは、その文のタイプでなければなりませ メンバーの名前のタイプ。
表の列のメンバーはまた、「ドメインテーブル」と呼ばれる、ドメインの各メンバーは、構造体であります
構造型変数の定義
図1に示すように、最初の文の構造型、およびその後は、変数の型を定義します
学生のstruct { NUM INT; CHAR名[20である]; char型性別; INT年齢; }; 構造体STUDENT1、STUDENT2; 構造型変数名構造名
2、声明の中で同時に型の変数を定義します
学生のstruct { int型NUM; チャー名[20である]; char型性別; INT年齢; } STUDENT1、STUDENT2; 一般的な形式: 構造体の構造名は { メンバーがリストされている }変数はカラム腕時計。
3、構造の型定義と直下型変数の名前を指定しません
一般的な形式: 構造体 { メンバーがリストされている }可変時計カラム;
注:構造型名のメンバーがプログラム内で同じ変数名かもしれないが、彼らは同じオブジェクトを表すものではありません。
構造体変数を初期化し、参照されています
構造体変数の定義は、そのメンバーに初期化することができます1、
:2、構造体は、メンバ変数の値への参照を挙げることができます
構造体変数のメンバー
図3に示すように、それ自体が別のタイプに属する構造を有する構造体のタイプは、オペレータのいくつかのメンバーの使用は、最も低いランク又はアクセスおよび割り当てに、ステージによってステージの最下位レベルのメンバーを検索する場合操作。
基準部材方法:
student1.num(NUMにおける構造体変数の学生会員) student2.birthday.month (メンバーの月のstudent2メンバーの誕生日の構造体変数)
図4に示すように、構造体のメンバ変数の計算であってもよいです
student2.score = student1.score;(代入演算子) SUM = student2.score + student1.score;(加算器) (プラス操作から)student2.age ++
図5に示すように、構造体変数の同種同士を割り当てることができ
student2 = STUDENT1
6、変数のメンバのアドレスが構造を参照することができ、あなたは、構造体変数のアドレスを参照することができます
scanf関数( "%のD"、& student2.score);( student2.score入力値) のprintf( "%のD"、&STUDENT2);(開始アドレスSTUDENT2の出力可変構造)
アドレス構造可変変速機の主なパラメータの関数としてアドレス構造体変数
構造体の使用配列
明らかに、アレイに使用されるべきデータ操作を必要とする10人の学生が、存在する場合、構造変数は、関連するデータのセットに格納することができ、これは構造体の配列であります
構造一般的な形式の配列を定義します。
。1、 構造体構造名 {メンバー}平板状配列名[配列の長さ] 2、 構造体、構造体の定義のこのタイプの、配列宣言: 構造型配列名[配列サイズ] として:構造体人リーダー[3]; //リーダー構造は、配列名であります
アレイ構成の初期化は、アレイプラスで後に定義されます。
} = {初期値テーブルカラム;
例如:構造体人リーダー[3] = { "LI"、0、 "張"、0、 "王"、0}。
構造体ポインタ
構造体ポインタ変数が構造体へのポインタである、構造体変数の先頭アドレスは、この構造体変数へのポインタです。
構造体変数の開始アドレスがポインタ変数に格納されている場合、ポインタ変数は、構造体変数を指します。
変数の構造体へのポインタ
オブジェクト・ポインタ変数の構造変数を指し示すポインティング構造は、アレイの素子構造に向けることができます。
基本型ポインタ変数は構造体変数と同じタイプでなければなりません。
例えば:PT // Ptが型構造体学生または配列要素の変数に向けることができる*構造体スチューデント
構造体学生 { ロングNUM; CHAR名[50]; char型性別; フロートスコア; }; 構造体学生stu_1; //型構造体学生stu_1の変数定義 構造体スチューデント* Pを; //データのポインタ変数p構造体学生タイプを定義 &stu_1 = P; のprintf( "NO:%LD \ NNAME:%S \ nsex:%C \ NSCore :. 5.lf%\ N-"、 stu_1.num、stu_1.name、stu_1.sex、stu_1.score)。 同等である のprintf( "NO:%LD \ NNAME:%S \ nsex:%C \ NSCore:5.lf%\ N-"、 (* .num P)、(P *).nameの、(P *) .sex、(* P).score) ; C言語が(* P).nameのとP->地名可能 P->名がメンバーはPで指し示さ構造体変数名を表し 、 " - >"を、前記しましたポイントにオペレータ 1、STUのメンバー(例:stu.name)。 STUにおける構造体変数pは、使用以下の3種類と等しい場合。 2、(P *)メンバー名(例えば:(P *).nameの)。 。3、P->メンバー名(例:P->名)
構造体の配列へのポインタ
struct Student stu[3] = {
{10101,"mao",'M',78},
{10103,"li",'F',98},
{10106,"zhang",'M',86},
};
struct Student* p; //定义指向struct Student 结构体变量的指针变量
printf("学生的全部信息\n");
for (p = stu; p < stu + 3; p++)
{
printf("%5d %-20s %2c %4d\n",p->num,p->name,p->sex,p->age);
}
そして、可変パラメータの関数としての構造体変数を持つ構造体へのポインタ
別の関数に変数値の構造、3つの方法があります。
-
パラメータとしてメンバ構造変数。たとえば、次の関数の引数としてSTU [1] .num
-
引数として構造体変数。
-
引数として構造体変数(または配列要素)構造変数(または配列要素)のアドレスへのポインタの方を向いて、パラメータを渡されます。