当前位置: 首页 > news >正文

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

结构体详解

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个字节,系统开销会较小一些,效率也会更高一些。

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

相关文章:

  • 实战-使用 Playbook 批量部署多台 LAMP 环境
  • Android实现漂亮的波纹动画
  • 【线性代数的理解】 为什么说线性代数研究的是空间变换?旋转矩阵坐标转换矩阵
  • 社交APP如何打造高粘性兴趣社群
  • 泰勒公式详解与应用
  • 学生管理前端
  • element-ui infiniteScroll 组件源码分享
  • C# 基于.NET Framework框架WPF应用程序-MQTTNet库实现MQTT消息订阅发布
  • 基于vue框架的游戏博客网站设计iw282(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • SQL命令详解之增删改数据
  • Godot4.3 显示像素风格图片模糊如何设置?
  • 【C++】Points
  • GenBI 可视化选谁:Python Matplotlib?HTML ?Tableau?
  • Day31 第八章 贪心算法 part04
  • 进程间通信 —— 共享内存
  • 数字电子电路基础第三章——门电路(一)
  • MySQL--DQL、DML、DDL、DCL概念与区别
  • 硬编码(三)经典变长指令一
  • 2011-2019年各省电信业务总量数据
  • [STM32]从零开始的STM32 DEBUG问题讲解及解决办法
  • 自建网站怎么做优化/百度网址链接
  • 网站建设补充协议模板/今日新闻最新头条10条
  • 陕西省信用建设门户网站/南宁做网站公司
  • 平度网站建设/怎么提升关键词的质量度
  • 每天做任务得钱的网站/找seo外包公司需要注意什么
  • 工商局网站查询入口/深圳短视频推广