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;
}

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

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

相关推荐
丰锋ff7 分钟前
1.2 Qt常用基础类型
开发语言·qt
冰暮流星1 小时前
javascript之String方法介绍
开发语言·javascript·ecmascript
nianniannnn1 小时前
Qt QMessageBox知识点
开发语言·数据库·qt
故乡de云2 小时前
AWS 添加付款方式失败排查清单:卡片、银行风控与账号状态逐项定位
开发语言·php
J_yyy2 小时前
【Qt核心组件类框架】
开发语言·qt
星恒随风2 小时前
C++ STL 栈详解:stack 的使用、经典题目与简单模拟实现
开发语言·数据结构·c++·笔记·学习
运维行者_2 小时前
如何查看每个IP的带宽使用情况?NetFlow 技术实战指南
开发语言·网络·分布式·后端·架构·带宽
天天进步20152 小时前
Python全栈项目--基于深度学习的图像超分辨率系统
开发语言·python·深度学习
blevoice3 小时前
抖抖燃脂机单 AC6966B 主控调试踩坑:Type-C 整机供电喇叭无声排障
c语言·开发语言·单片机
小小晓.3 小时前
C++小白记:C风格字符串和数组用法
c语言·开发语言·c++