C语言整体梳理-基础篇-结构体

发布于:2025-03-01 ⋅ 阅读:(9) ⋅ 点赞:(0)

结构体详解

1.1结构体是什么?

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

数组是相同类型的元素组成的集合,结构体可以是不同类型元素组成的集合。

1.2结构体的声明

1.2.1常规声明

struct tag		//tag:结构体名称
{
	member list;//成员列表,可以有一个或者多个

}variable list;//变量列表。可以有一个或多个

struct dog			//声明:狗类型的结构体
{	
	char type[20];	//狗的品种
	char name[10];	//狗的名字
	char sex[2];	//狗的性别
	int age;		//狗的年龄
}dog1,dog2,dog3;	//定义狗类型的结构体变量。也可以不定义(全局变量)

1.2.2别名声明

typedef :为复杂的结构体声明定义一个简单的别名

typedef struct Students	//声明学生类型的结构体
{
	//成员变量:是用来描述结构体对象的相关属性的
	char name[20];		//姓名
	long long stuid;	//学号
	char sex[2];		//性别
	int age;			//年龄
}stu;					//创建别名:stu是Students的别名

1.2.3两种声明的区别

为结构体创建别名后,可以更加方便的定义该类型的结构体变量 


1.3结构体成员的类型

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


1.4结构体变量的定义及初始化

1.5结构体的访问

在基础篇-操作符有提到过

1.5.1

#include<stdio.h>

struct dog			//声明:狗类型的结构体
{	
	char type[20];	//狗的品种
	char name[10];	//狗的名字
	char sex[5];	//狗的性别
	int age;		//狗的年龄
}dog1={"边牧","牧汪汪","公",2};	//定义狗类型的结构体变量。并初始化

typedef struct Students	//声明学生类型的结构体
{
	//成员变量:是用来描述结构体对象的相关属性的
	char name[20];		//姓名
	long long stuid;	//学号
	char sex[5];		//性别
	int age;			//年龄
	struct dog studog;	//学生的狗

}stu;					//创建别名:stu是Students的别名

int main() {
	stu s1 = { "小明",20200613,"男",15,{"拉布拉多","拉汪汪","母",3}};
	printf("学生结构体s1的名字是:%s,他的狗叫:%s,今年%d岁了,是一只%s狗",s1.name,s1.studog.name,s1.studog.age,s1.studog.sex );
	return 0;
}

 1.5.2

1.6结构体传参

函数传参时,参数是需要压栈的。

值传递是将原本的值复制一份在内存中,若是该参数占用的内存较大的话,则会占用更多的内存空间,拷贝的过程也会消耗较多的时间。

而址传递是将其地址传递过去,占用的空间为4或8个字节,系统开销会较小一些,效率也会更高一些。

通常来说结构体会比较大一些,所以结构体传参时,建议使用址传递。