C语言初阶————结构体

2026年1月10日学习总结:

今天开启了初阶的新篇章------结构体,关于结构体的相关内容主要分为以下三个部分:

(1)结构体的声明和结构体变量的初始化

1.结构体的基础知识

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

与数组的区别:数组是相同类型的集合,而结构体可以是不同类型变量的集合。

如何更好理解呢?

可以理解为结构体是一种定义复杂对象的一种描述方式,常见的复杂对象有人(包含姓名,电话,性别,身高等)、书(包含书名,作者,定价,书号等)等,而该方式内可以用不同的内置类型(如int、long、char、double等)来帮助描述。

2.结构体的声明形式: struct tag

{

member_list;

}variable_list; 其中struct结构体关键字,tag结构体标签(可以自定义),member_list成员列表(可一个或多个), variable_list使用该类型创建的变量(可有可无,一般不建议使用)。

3.结构体成员的类型:可以是标量、数组、指针、甚至是其他结构体。

结构体变量的创建和初始化:

cs 复制代码
struct pro
{
	char name[20];
	char tele[20];
	char sex[4];
	int high;
}p1;//使用上述方法创建变量,在该位置为全局变量
struct pro p2;//使用创建好的结构体类型创建变量
struct st
{
	struct pro p;//其他结构体(前提是使用的结构体需要在该结构体之前已经定义)
	char num[18];
	float f;
};
//以上两种方法均可在主函数(main)中创建
int main()
{
	struct pro p3 = { "张三","12348889560","男",181 };//创建和初始化可以一起
	struct st s = { {"lisi","1592398888","女",168},50,3.14 };//变量中有其他结构体的初始化
	return 0;
}

(2)结构体成员变量的访问

1.通过结构体变量访问成员变量:

使用点操作符(.)进行访问,点操作符接受两个操作数

基本形式:结构体变量.成员变量

cs 复制代码
int main()
{
	struct pro p3 = { "王五","18266698888","女",170 };
	struct st s = { {"lisi","1592398888","女",168},"50",3.14 };
	printf("%s %s %s %d\n", p3.name, p3.tele, p3.sex, p3.high);
	printf("%s %s %s %d %s %s %f\n", s.p.name, s.p.tele, s.p.sex, s.p.high, s.num, s.f);
	return 0;
}

2.通过结构体指针访问指向变量的成员

①使用点操作符:(*结构体指针).成员变量 ②使用->操作符:结构体指针->成员变量

cs 复制代码
//使用点操作符:(*结构体指针).成员变量
void print1(struct pro* p)
{
	printf("%s %s %s %d\n", (*p).name, (*p).tele, (*p).sex, (*p).high);
}

//使用->操作符:结构体指针->成员变量
void print2(struct pro* p)
{
	printf("%s %s %s %d\n", p->name, p->tele, p->sex, p->high);
}

int main()
{
	struct pro p3 = { "王五","18266698888","女",170 };
	struct st s = { {"lisi","1592398888","女",168},"50",3.14 };
	printf("%s %s %s %d\n", p3.name, p3.tele, p3.sex, p3.high);
	printf("%s %s %s %d %s %f\n", s.p.name, s.p.tele, s.p.sex, s.p.high, s.num, s.f);
	print1(&p3);
	print2(&p3);
	return 0;
}

(3)结构体传参 1.结构体变量传参 2.结构体指针传参

cs 复制代码
//①结构体变量传参
void print3(struct pro p)
{
	printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);
}
//②结构体指针传参
void print4(struct pro* p)
{
	printf("%s %s %s %d\n", p->name, p->tele, p->sex, p->high);
}
int main()
{
	struct pro p3 = { "王五","18266698888","女",170 };
	struct st s = { {"lisi","1592398888","女",168},"50",3.14 };
	print3(p3);
	print4(&p3);
	return 0;
}

以上两种传参方法中首选结构体指针传参

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

相关推荐
IvanCodes1 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
aramae2 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
无敌贵点大王3 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
Logic1014 小时前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
qq_2518364575 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
郑州光合科技余经理6 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手6 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
+VX:Fegn08956 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
阿里嘎多学长7 小时前
2026-09-20 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Escalating_xu8 小时前
【C 语言项目】数组和函数综合实践:从零实现控制台扫雷游戏
c语言