结构体

结构的基础知识

结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的额变量。

数组:
一组相同元素的集合

结构的声明

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

结构体成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体。

结构体变量的定义和初始化

struct B
{
	char c;
	short s;
	double d;

};


struct Stu
{
	//成员变量
	struct B sb; //结构体嵌套

	char name[20];//姓名
	int age;//年龄
	char id[20];
}s1,s2;//s1和s2也是结构体变量
//s1,s2是全局变量

int main()
{
	//s是局部变量
	struct Stu s = { {'w',20,3.14},"张三",30,"20200534"};//结构体嵌套初始化

	return 0;
}

结构体成员的访问

int main()
{
	//s是局部变量
	struct Stu s = { {'w',20,3.14},"张三",30,"20200534"};//嵌套初始化
	//. -> 访问
	printf("%c\n", s.sb.c);
	printf("%s\n", s.id);

	struct Stu* ps = &s;
	printf("%c\n",(*ps).sb.c);
	printf("%c\n", ps->sb.c);

	return 0;
}

屏幕截图 2023-03-11 164740

结构体传参


void print1(struct Stu t)
{
	printf("%c %d %lf %s %d %s\n", t.sb.c, t.sb.s, t.sb.d, t.name, t.age, t.id);
};

void print2(struct Stu* ps)
{
	printf("%c %d %lf %s %d %s\n", ps->sb.c, ps->sb.s, ps->sb.d, ps->name, ps->age, ps->id);
};

int main()
{
	//s是局部变量
	struct Stu s = { {'w',20,3.14},"张三",30,"20200534" };//嵌套初始化
	//写一个函数打印s的内容
	print1(s);//传值调用     空间时间浪费
	print2(&s);//传址调用 ps可改变s  优选print2

	return 0;
}

1

上面的 print1 和 print2 函数哪个好些?

答案是:首选print2函数。
原因:
函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的
下降。
结论:
结构体传参的时候,要传结构体的地址。