类型2:
struct stu
{
char name[20];
int age;
}s1,s2;//定义全局变量s1,s2
看这段代码
struct book
{
float height;
char name[20];
}b;
struct stu
{
char name[20];
int age;
char id[20];
struct book b;
};
int main()
{
//初始化时,其实是和数组初始化一样,用大括号,里面放上初始化的值。若结构体里面包含结构体,则大括号里面 //在放一个大括号,里面放内部结构体初始化的值
struct stu a={“bobo”,18,“2021520”,{15.8,“free”}};
}
[
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
]( )介绍
- 结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数,如:m.n(m为结构体变量,n为结构体中你想要访问的成员变量)
- 指向一个结构体的指针访问指向变量的成员是通过操作符(->)访问的。 如:m->n(m为指向一个结构体的指针,n为结构体中你想要访问的成员变量),也可以(*m).n
struct book
{
float height;
char name[20];
}b;
struct stu
{
char name[20];
int age;
char id[20];
struct book b;
};
int main()
{
struct stu a={“bobo”,18,“2021520”,{15.8,“free”}};
//法一
printf("%s\n",a.name);
printf("%d\n",a.age);
printf("%.1f\n",a.b.height);//若访问结构体中的结构体中的一个成员,先访问到内部的结构体,再访问内部结构体中的成员
//法二
struct stu* pa=&a;
printf("%s\n",pa->name);
printf("%d\n",pa->age);
printf("%.1f\n",pa->b.height);
//法三
printf("%s\n",(*pa).name);
printf("%d\n",(*pa).age);
printf("%.1f\n",(*pa).b.height);
}
注意
结构体传参的时候,要传结构体的地址更好
看一段代码
struct book
{
float height;
char name[20];
}b;
struct stu
{
char name[20];
int age;
char id[20];
struct book b;
};
void print1(struct stu p)
{
printf("%s %d %s %.1f %s",p.name,p.age,p.id,p.b.height,p.b.name);
}
void print2(struct stu* pa)
{
printf("%s %d %s %.1f %s",pa->name,pa->age,pa->id,pa->b.height,pa->b.name);
}
int main()
{
struct stu a={“bobo”,18,“2021520”,{15.8,“free”}};
//写一个函数打印a的内容
print1(a);//结果为:bobo 18 2021520 15.8 free(正常打印)
//再写一个函数,通过传a的地址打印a的内容
print2(&a);//结果为:bobo 18 2021520 15.8 free(正常打印)
return 0;
}
那么传值和传址有什么不同,哪个更好呢?(首选传址)
- 传参时,其实是对实参的一份拷贝,是会开辟一块空间来存储实参。传值,是将整个实参拷贝过去,而传地址,传过去的只是地址,传参的效率更高一些。
- 函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
那么什么是函数调用的参数压栈呢?
- 栈:一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表
- 特点:先进的后出,后进的先出。(先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来))
- 压栈:给栈里存数据
本文介绍了C语言中结构体的定义、初始化、成员访问以及结构体作为函数参数的传值与传址方式。通过实例展示了如何通过指针访问结构体成员,并强调了传址方式在处理大型结构体时的效率优势。
15万+

被折叠的 条评论
为什么被折叠?



