構造(最初の知人)

コンテンツ

構造体宣言

構造体メンバーのタイプ

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

構造パラメータ 


構造体宣言

構造体は、異種要素のコレクションです

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つのアドレスだけで消費を減らすことができます。
結論:
構造体にパラメータを渡すときは、構造体のアドレスを渡す必要があります。

おすすめ

転載: blog.csdn.net/qq_54880517/article/details/124048433