【C语言】初识结构体

☃️内容专栏:【C语言】初阶部分

☃️本文概括:继初识C语言,对C语言结构体初阶部分进行归纳与总结。

☃️本文作者:花香碟自来_ 

☃️发布时间:2023.2.19

一、结构体的声明 

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

比如说一本书,它包含书名、书号、出版社、价格等,我们用一种数据类型去描述并不能完整地描述出来,这时候就需要用到结构体声明了。

1.1结构的声明

语法格式:struct tag (结构体名称)
               {
                       member-list;
(成员列表)
               }variable-list;(变量列表,全局变量) 

在结构体声明的{}后面创建的变量是全局变量,如果我们只想创建局部变量,就在mian函数里创建。

如果我们每次在main函数中创建变量都要写Struct Book,感觉很麻烦,可不可以直接写Book加变量名呢?,我们可以在声明struct Book之前加一个typedef,在结构体声明的{}后面加上Book,对其进行重命名。(此时,后面就不能直接添加全局变量了)

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

 变量定义:创建了结构体类型,那么就可以直接定义变量。

struct Point
{
int x;
int y;
}p1; //声明类型的同时定义变量p1
struct Point p2; //定义结构体变量p2

初始化:定义变量的同时并赋值

将代码打印:

二、结构体成员的访问

2.1结构体变量访问成员

结构体变量的成员是通过点操作符(.)访问的。 格式:结构体变量名.成员变量

直接上代码:

typedef struct Student
{
	char name[20];
	int age;
}stu;
stu s = { "张三",18 };

int main()
{
	printf("%s", s.name);
	s.age = 20;
	return 0;
}

2.2结构体指针访问指向变量的成员

  •  (*结构体成员名). 成员变量 
  •       结构体成员名->成员变量
typedef struct Student
{
char name[20];
int age;
}stu;
stu s = { "张三",18 };

void print(stu* s)
{
	printf("%s %d\n", (*s).name, (*s).age);
	printf("%s %d\n", s->name, s->age);
}
int main()
{
	print(&s);
    return 0;
}

三、结构体传参

直接上代码

struct S
{
	int arr[100];
	int num;
};
struct S s = { {1,2,3,4}, 1000 };
//结构体传参
void print1(struct S s)
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", s.arr[i]);
	}
	printf("\n%d\n", s.num);
}
//结构体地址传参
void print2(struct S* ps)
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", ps->arr[i]);
	}
	printf("\n%d\n", ps->num);
}
int main()
{
	print1(s); //传结构体
	print2(&s); //传地址
	return 0;
}

那么以上print1和print2函数哪个更优化呢?答案当然是print2

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

结论:所以,我们在函数给结构体传参的时候,尽量考虑传递结构体的地址。


 ☃️ 以上就是初阶结构体部分的详细内容,创作不易,还请各位多加关注、点赞、收藏哦,感谢支持呐~ 

猜你喜欢

转载自blog.csdn.net/qq_63320529/article/details/129097799