コンテンツ
構造体宣言
構造体は、異種要素のコレクションです
struct tag { member-list; }variable-list;
例:人:名前+年齢+性別
struct people { char name[20];//名字 int age; //年龄 char sex[5]; //性别 }pl;//全局变量 int main() { struct people pa;//定义一个局部变量 return 0; }
構造体メンバーのタイプ
構造体のメンバーは、スカラー、配列、ポインター、またはその他の構造体にすることができます。
struct student { int id; char name[10]; }stu; struct school { char add[20]; struct student stu; }sc;
構造体メンバーへのアクセス
構造体変数のメンバーには、ドット演算子(。)を使用してアクセスします。ドット演算子は2つのオペランドを受け入れます。
sにはメンバーの名前と年齢があることが
わかります。sのメンバーにアクセスするにはどうすればよいですか。また、それらを印刷するにはどうすればよいですか。struct S s; strcpy(s.name, "刘华强");//使用.访问name成员 //对字符串赋值不能用"=",只能用strcpy函数 s.age = 20;//使用.访问age成员
変数のメンバーへの構造体ポインターアクセス
構造体変数ではなく、構造体へのポインターを取得する場合があります。
メンバーにアクセスする方法は?
構造パラメータ
考えてみてください:次のprint1関数とprint2関数のどちらが優れていますか?
struct Stu { int arr[10]; int num; }; struct Stu s = { {1,2,3,4}, 10 }; void print1(struct Stu s)//结构体传参 { printf("%d\n", s.num); } void print2(struct Stu* ps)//结构体地址传参 { printf("%d\n", ps->num); } int main() { print1(s); //传结构体 print2(&s); //传地址 return 0; }
printf2関数の方が優れています!!!
理由
パラメーターを関数に渡すときは、パラメーターをスタックにプッシュする必要があります。
構造体オブジェクトが渡されると、構造体が大きすぎ、パラメータスタッキングのシステムオーバーヘッドが比較的大きくなるため、パフォーマンスが低下します。過去に構造体ポインタを渡す場合、1つのアドレスだけで消費を減らすことができます。
結論:
構造体にパラメータを渡すときは、構造体のアドレスを渡す必要があります。