平湖建设局网站,深圳网站建设外贸,金凤区建设交通局网站,事件营销定义你是真的“C”——详解结构体知识点#x1f60e;前言#x1f64c;什么是结构体#xff1f;#x1f64c;1. 结构体的声明#x1f64c;1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2. 结构体成员的访问#x1f64c;3结构体传参#x…
你是真的“C”——详解结构体知识点前言什么是结构体1. 结构体的声明1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2. 结构体成员的访问3结构体传参总结撒花博客昵称博客小梦 最喜欢的座右铭全神贯注的上吧 作者简介一名热爱C/C算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主 博主小留言哈喽各位CSDN的uu们我是你的博客好友小梦希望我的文章可以给您带来一定的帮助话不多说文章推上欢迎大家在评论区唠嗑指正觉得好的话别忘了一键三连哦 前言 哈喽各位友友们我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下我仅已此文和大家分享C语言中结构体相关的知识点~ 都是精华内容可不要错过哟 什么是结构体
1. 结构体的声明
1.1 结构的基础知识 在我们生活的世界是十分丰富多彩的C语言虽然提供了许多的类型但是对于描述这个丰富多彩的世界是不够用的。因此需要自定义一些类型。而结构体就属于自定义数据类型的一种。比如描述老师描述同学抑或是描述学生该用什么类型呢为了解决这些问题结构体就出现了。 简单的概括来说结构是一些值的集合这些值称为成员变量。结构的每个成员可以是不同类型的变量。
1.2 结构的声明
那么结构体是如何声明的呢接下来我举个栗子辅助大家理解一下
typedef struct Stu
{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号
}Stu//分号不能丢1.3 结构成员的类型
结构的成员可以是标量、数组、指针甚至是其他结构体。
1.4 结构体变量的定义和初始化
有了结构体类型那如何定义变量其实很简单。请看下图分析
当然除了上述的初始化结构体还支持嵌套初始化也就是一个结构体的变量作为另外一个结构体的成员然后初始化时可以进行嵌套初始化。这是C语言语法支持的。在结构体中很常会见到与typedef结合使用这是为什么呢其实typedef 可以起到结构体类型重命名的作用目的是为了简单化结构体类型名。接下来举个栗子辅助大家理解
typedef struct Node
{int data;struct Node* next;
}Node;int main()
{struct Node b1;Node b2;return 0;
}有上述代码可以看出定义结构体b1变量明显比定义b2要复杂类型名得到简化提高了代码的阅读性。
2. 结构体成员的访问
结构体变量访问成员
结构变量的成员是通过点操作符.访问的。点操作符接受两个操作数。结构体变量.结构体成员结构体指针访问指向变量的成员有时候我们得到的不是一个结构体变量而是指向一个结构体的指针。结构体指针-结构体成员
这里举个栗子
#include stdio.h
struct Book
{char name[20];int price;
};
void print(struct Book* p)
{printf(%s %d\n, p-name, p-price);
}int main()
{struct Book b1 {C语言, 66};struct Book b2 { .price 80, .name 数据结构};//初始化成员变量可以不按照声明的顺序//结构体变量.结构体成员printf(%s %d\n, b1.name, b1.price);printf(%s %d\n, b2.name, b2.price);//结构体指针-结构体成员struct Book* p1 b1;print(b1);return 0;
}程序运行结果图
3结构体传参
结构体传参是怎么传的呢其实也有两种传法第一种是传值调用另外一种就是传址调用啦。那这两种传参的方法哪种更优呢接下来我举个栗子辅助大家理解这两种传参方法。
#include stdio.h
struct S
{int arr[100];int n;
};
void print1(struct S ss)
{int i 0;for (i 0; i 10; i){printf(%d , ss.arr[i]);}printf(\n%d\n, ss.n);
}void print2(struct S* ps)
{int i 0;for (i 0; i 10; i){printf(%d , ps-arr[i]);}printf(\n%d\n, ps-n);
}int main()
{struct S s { {1,2,3,4,5}, 100 };print1(s);print2(s);return 0;画图分析 因为函数传参的时候参数是需要压栈的。如果传递一个结构体对象的时候结构体过大参数压栈的的系统开销比较大所以会导致性能的下降。因此选择传址调用方法才是最优的选择。 结论结构体传参的时候要传结构体的地址。
总结撒花 本篇文章旨在分享C语言详解结构体的相关知识点。希望大家通过阅读此文有所收获如果我写的有什么不好之处请在文章下方给出你宝贵的意见。如果觉得我写的好的话请点个赞赞和关注哦~