您现在的位置是:首页 >技术杂谈 >【C生万物】 结构体篇网站首页技术杂谈
【C生万物】 结构体篇
                简介【C生万物】 结构体篇            
            欢迎来到 Claffic 的博客 💞💞💞 👉 专栏:《C生万物 | 先来学C》👈
前言:
这期继续C语言的学习,进行结构体的讲解,值得注意的是,这期的结构体只是简单的介绍和使用,后期会再次详细讲解。
目录
Part1:结构体的声明
1.概念
结构体是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的变量。
2.声明和定义
一图就懂:

如:

声明一个学生结构体,其中包括学生的姓名 name ,年龄 age ,性别 sex ;
同时定义了两个该类型的结构体变量:s1 , s2.
当然先声明后定义也可以:

为了方便,还可以这样玩:

以上三种方式没有本质区别,都是声明并定义了全局结构体变量 s1 , s2.
3.变量初始化
初始化就是给结构体成员附一些初始值
继学生结构体:

初始化:
Stu s1 = { "claffic",18,"boy" }; 
注意:初始化内容一定按顺序与类型匹配
那结构体里有结构体怎么办?
嵌套初始化即可:
typedef struct Point
{
	int x;
	int y;
};
struct Node
{
	int data;
	struct Point p;
	struct Node* next;
}n1 = { 10,{1,3},NULL };
struct Node n2 = { 20,{2,4},NULL };
 
 
Part2:结构体成员访问
1.结构体变量访问成员
结构体变量成员是通过点操作符 (.) 来访问的,点操作符接受两个操作数。

struct student s;
strcpy(s.name, "claffic"); // 字符串不可直接用 = 赋值
strcpy(s.sex, "boy");
 
2.结构体指针访问成员
有时我们得到的不是结构体变量,而是结构体指针,也可以访问结构体变量。
struct student
{
	char name[20];
	int age;
	char sex[5];
};
void Print(struct student* ps) // 传递指针
{
    // 解引用访问
	printf("name = %s  age = %d  sex = %s", (*ps).name, (*ps).age, (*ps).sex);
    // 指针访问 用 -> 操作符
	printf("name = %s  age = %d  sex = %s", ps->name, ps->age, ps->sex);
}
int main()
{
	struct student s = { "claffic",18,"boy" };
	Print(&s); // 传递地址,取地址
	return 0;
} 
运行结果:

Part3:结构体传参
传参与成员的访问大差不差
也是有两种类型:结构体变量传参 和 结构体指针传参
我们接下来对比一下两种方法:
struct S
{
	int data[1000];
	int num;
};
struct S s = { {1,2,3,4}, 500 };
//结构体传参
void Print1(struct S s)
{
	printf("%d
", s.num);
}
//结构体地址传参
void Print2(struct S* ps)
{
	printf("%d
", ps->num);
}
int main()
{
	Print1(s);  // 传结构体
	Print2(&s); //传地址
	return 0;
} 
以上方式展示了两种传参的方式,
试想一下, Print1 和 Print2 哪个好?
首选 Print2
原因:
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。而指针的大小是固定不变的,开销稳定。
 
 结构体传参的时候,要传结构体的地址 
 
 
总结:
这就是结构体的初级知识介绍了,整体上不算复杂,会定义和使用结构体即可。
码文不易
如果你觉得这篇文章还不错并且对你有帮助,不妨支持一波哦 💗💗💗
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。
        
    
        
    
            




U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结