【初始C语言8】详细讲解初阶结构体的知识

这篇具有很好参考价值的文章主要介绍了【初始C语言8】详细讲解初阶结构体的知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

💓作者简介: 加油,旭杏,目前大二,正在学习C++数据结构等👀
💓作者主页:加油,旭杏的主页👀

⏩本文收录在:再识C进阶的专栏👀

🚚代码仓库:旭日东升 1👀

🌹欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖

学习目标:

       在上一章中,我们浅浅地学习了初阶指针的相关知识,而这一章中,我们要学习结构体。可能有很多小伙伴不知道或者没有听过这个名词,在前面C语言总结中的数据类型中,我们讲述了一些数据类型,但是在生活中,肯定有这些结构体所不能表示的复杂数据类型,这样在C语言中,我们为了可以表示这些复杂数据类型,我们引出了结构体的概念!


学习内容:

通过上面的学习目标,我们可以列出要学习的内容:

  1. 结构体类型的声明
  2. 结构体初始化
  3. 结构体成员的访问
  4. 结构体传参

一、结构体类型的声明

1.1 结构的基础知识

       小编先在这里声明一下:标题中的结构就是结构体的意思结构是一些值的集合,这些值称为成员变量。结构的每一个成员可以是不同类型的变量这里是不是很熟悉,在之前数组的章节中,数组是存放一组相同类型的元素的集合。

       这一小节主要了解一下结构体的概念以及将其与数组区分开了,重点还是数组与结构体的区别

1.2 结构的声明

struct tag{
    member list;  //成员变量的列表
}variable-list;  //变量列表

为什么要学习结构体呢? 

       因为当前学习过的类型都是内置类型,比如:char、short、int、double……而如果我们想用C语言描述一个人的时候,怎么描述:人有名字、性别、年龄、电话、地址等因素,因此称其为复杂对象,人的一些因素就对应结构体中的成员列表,这就引入了结构体

下面我们来举个例子:

struct Stu {
	//学生的相关属性
	char name[20];
	int age;
	char sex[5];
	char add[30];
}s3, s4;
//s3,s4是结构体类型的变量,是全局变量

int main()
{
    struct Stu s1;
//s1是结构体类型的变量,是局部变量
}

注意事项:

       在声明结构体变量的时候,可以将 struct 省略吗?一般是不可以的,但是如果你使用typedef 对结构体进行重命名,这样就可以省略 struct:

typedef struct Stu {
	//学生的相关属性
	char name[20];
	int age;
	char sex[5];
	char add[30];
}Stu;  //Stu是重命名产生的新的类型

Stu s5;  //这样就可以了

1.3 结构成员的类型

       结构的成员可以是标量数组指针,甚至是其他结构体

1.4 结构体变量的定义和初始化

结构体变量的定义(全局变量和局部变量)有几种方法:

//还是以学生的结构体为例
struct Stu {
	//学生的相关属性
	char name[20];
	int age;
	char sex[5];
	char add[30];
}s1; //s1是全局变量
struct Stu s2;  //s2是全局变量

int main(){
    struct Stu s3; //s3是局部变量
}

结构体变量的初始化操作:

       数组的初始化是用大括号,结构体变量的初始化也是使用大括号进行赋值。为了使读者会进行其初始化操作,我们来使用一个比较复杂的结构体类型:

struct B {
	int c;
	char ch;
};
struct s {
	char c;
	int num;
	int arr[10];
	double* pd;
	struct B sb;
	struct B* ptr;
};
int main() {
	double b = 3.78;
	//按照顺序初始化
	struct s s1 = { 'a', 3, { 1,2,3 }, &b, {4, 'f'}, NULL }; //局部变量
	//指定成员初始化
	struct s s2 = { .num = 400, .arr = {5,6,7} };
}

二、结构体成员的访问

1. 结构体变量.成员名

2. 结构体指针->成员名

       在前面的操作符中,我们了解了这两个操作符,下面让我们进一步深入研究。在讲之前,我们在来回顾一个易错点

struct S {
	int age;
	char name[20];
};
void my_set(struct S t) {
	t.age = 19;
	strcpy(t.name, "zhangsan");
}
int main()
{
	struct S s = { 0 };
	my_set(s);
}

【初始C语言8】详细讲解初阶结构体的知识,C语言笔记——初阶and进阶,c语言,结构体,结构体的声明,结构体成员的访问,结构体传参,开发语言,结构体的初始化

       这是一个典型的错误,经典的错误,标准的零分。形参是实参的临时拷贝,改变形参的值不会影响实参的值。

改进方法:

void my_set(struct S* ps) {
	ps->age = 19;
	strcpy(ps->name, "zhangsan");
}

【初始C语言8】详细讲解初阶结构体的知识,C语言笔记——初阶and进阶,c语言,结构体,结构体的声明,结构体成员的访问,结构体传参,开发语言,结构体的初始化

三、结构体传参

下面我们来写一下打印结构体的函数:

void my_print1(struct S t) {
	printf("%d %s", t.age, t.name);
}

void my_print2(struct S* ps) {
	printf("%d %s", ps->age, ps->name);
}

这两种函数都可以将结构体的内容打印出来,但是这两个函数哪个更优呢?

答案:肯定是第二个。

原因:

       函数传参的时候,我们需要将参数进行圧栈的;如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。

总结:结构体传参的时候,尽量传结构体的地址。 

四、总结 

       这一章的内容还是比较简单,也是比较少的,如果觉得这一章的知识掌握的非常好,可以去看一下我的另外一篇关于结构体的知识:结构体进阶 。文章来源地址https://www.toymoban.com/news/detail-714205.html

学习产出:

  1. 结构体类型的声明
  2. 结构体初始化
  3. 结构体成员的访问
  4. 结构体传参

到了这里,关于【初始C语言8】详细讲解初阶结构体的知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言高阶篇】C语言面试必考知识点,结构体的内存对齐我看还有谁不会!

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,今天给大家带来的是结构体的内存对齐这部分知识,可以说是干货满满啦!    ⛳️ 在我们C语言的面试题中,结构体最

    2024年02月16日
    浏览(49)
  • 【初阶C语言】实现扫雷(详细讲解+全部源码)

    本游戏用到了三个文件 两个源文件:扫雷.c ,game.c 一个头文件:game.h 想要做好游戏,首要任务就是要把模块想好。 先打印一个游戏菜单 玩家选择是否(1\\0)是否进入游戏 游戏思路:(这次实现的是初级难度的扫雷,棋盘9X9,10个雷) 我们先创建两个二维数组,一个数组布

    2023年04月09日
    浏览(35)
  • C语言自定义类型:结构体的使用及其内存对齐【超详细建议点赞收藏】

    结构是一些值的集合,这些值称为 成员变量 。 结构的每个成员可以是不同类型的变量 。 注意 : 成员列表可以是不同类型的变量; 成员后一定要有分号; 花括号后也有一个分号。 例如描述一个学生: 注意:上述代码没有创建变量,也没有初始化, 只是声明了一个结构体类

    2024年03月13日
    浏览(56)
  • 初始C语言——详细地讲解数组的内容以及易错点

    目录 系列文章目录 前言 一、一维数组的创建与初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用  1.4 一维数组在内存中的存储 二、二维数组的创建与初始化  2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用  2.4 二维数组在内存中的存储 三、数组越界

    2024年02月14日
    浏览(38)
  • 初始C语言——详细讲解操作符以及操作符的易错点

     第一章 “C“浒传——初识C语言(更适合初学者体质哦!)  第二章 详细认识分支语句和循环语句以及他们的易错点   第三章 初阶C语言——特别详细地介绍函数  第四章 初始C语言——详细地讲解数组的内容以及易错点  第五章  初始C语言——详细讲解操作符以及操

    2024年02月13日
    浏览(57)
  • 初始C语言(6)——详细讲解表达式求值以及其易错点

     第一章 “C“浒传——初识C语言(1)(更适合初学者体质哦!)  第二章 初始C语言(2)——详细认识分支语句和循环语句以及他们的易错点   第三章 初阶C语言(3)——特别详细地介绍函数  第四章 初始C语言(4)——详细地讲解数组的内容以及易错点  第五章 初

    2024年02月12日
    浏览(37)
  • C语言完整版笔记(初阶,进阶,深刨,初阶数据结构)

    1.初阶: 1.1C语言初阶易忘知识点速记 2.进阶:  1.2C语言进阶易忘点速记 3.深剖: 2.1C语言重点解剖要点速记 2.2C语言重点解剖操作符要点速记   2.3C语言重点解剖预处理要点速记 2.4C语言重点解剖指针和数组要点速记 2.5C语言重点解剖内存管理函数要点速记 4.数据结构:

    2024年02月16日
    浏览(38)
  • 【数据结构初阶】十、快速排序(比较排序)讲解和实现(三种递归快排版本 + 非递归快排版本 -- C语言实现)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】九、排序的讲解和实现(直接插入 希尔 直接选择 堆 冒泡 -- C语言)

    2024年02月08日
    浏览(46)
  • 【C语言13】结构体的声明,定义与结构体的内存对齐

    通俗的说,结构体就是一个类的集合,如同整形数组是整形数字的集合体,结构体也是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 如果我们要表达一本书,那么这本书的元素有什么呢,书的名字,书的作者,书的创作日期~,而c语言中内置

    2024年02月13日
    浏览(72)
  • C++编程案例讲解-基于结构体的控制台通讯录管理系统

    添加联系人 :向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人 :显示通讯录中所有的联系人信息 删除联系人 :按照姓名进行删除指定联系人信息 查找联系人 :按照姓名查看指定联系人信息 修改联系人 :按照姓名重新

    2024年02月05日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包