结构体(初识)

目录

结构体的声明

结构成员的类型

结构体成员的访问

结构体传参 


结构体的声明

结构体是异类元素的集合

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;


结构体成员的访问

结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。

扫描二维码关注公众号,回复: 13777303 查看本文章


我们可以看到 s 有成员 name 和 age ;
那我们如何访问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函数更好!!!

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

如果传一个结构体指针过去,就一个地址,可以减少消耗.
结论:
结构体传参的时候,要传结构体的地址。

猜你喜欢

转载自blog.csdn.net/qq_54880517/article/details/124048433