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

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

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

相关推荐
YMWM_7 小时前
python3继承使用
开发语言·python
Once_day7 小时前
C++之《程序员自我修养》读书总结(1)
c语言·开发语言·c++·程序员自我修养
喜欢喝果茶.8 小时前
QOverload<参数列表>::of(&函数名)信号槽
开发语言·qt
亓才孓8 小时前
[Class类的应用]反射的理解
开发语言·python
努力学编程呀(๑•ี_เ•ี๑)8 小时前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
坚果派·白晓明8 小时前
在鸿蒙设备上快速验证由lycium工具快速交叉编译的C/C++三方库
c语言·c++·harmonyos·鸿蒙·编程语言·openharmony·三方库
island13148 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络
坚持就完事了8 小时前
Java中的集合
java·开发语言
魔芋红茶8 小时前
Python 项目版本控制
开发语言·python