『C语言初阶』第九章 -结构体

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

『C语言初阶』第九章 -结构体,C语言初阶知识,c语言,c++

🔥博客主页 小羊失眠啦.
🔖系列专栏 C语言
🌥️每日语录相信自己,比谁都棒。
❤️感谢大家点赞👍收藏⭐评论✍️


『C语言初阶』第九章 -结构体,C语言初阶知识,c语言,c++
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

前言

今天小羊又来给铁汁们分享关于C语言的结构体,在C语言中,结构体类型属于一种构造类型(其他的构造类型还有:数组类型,联合类型),今天我们主要简单了解一下结构体。


一、结构体是什么?

在实际问题中,一组数据往往有很多种不同的数据类型。例如,登记学生的信息,可能需要用到 char型的姓名,int型或 char型的学号,int型的年龄,char型的性别,float型的成绩。又例如,对于记录一本书,需要 char型的书名,char型的作者名,float型的价格。在这些情况下,使用简单的基本数据类型甚至是数组都是很困难的。而结构体则可以有效的解决这个问题。
结构体本质上还是一种数据类型,但它可以包括若干个“成员”,每个成员的类型可以相同也可以不同,也可以是基本数据类型或者又是一个构造类型。
结构体的优点:结构体不仅可以记录不同类型的数据,而且使得数据结构是“高内聚,低耦合”的,更利于程序的阅读理解和移植,而且结构体的存储方式可以提高CPU对内存的访问速度。
简单的来说,结构体就是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。


二、结构体声明

一般形式:

struct 结构体类型名
{
	成员列表
};

所以,struct关键词是表示接下来是一个结构体

例如,声明一个学生的结构:

struct Student{         //声明结构体
    char name[20];      //姓名
    int num;            //学号
    float score;        //成绩
};

上面的声明描述了一个包含三个不同类型的成员的结构,但它还没创建一个实际的数据对象,每个成员变量都用自己的声明来描述,以分号结束。花括号之后的分号表示结构声明结束。结构声明可以放在函数外(此时为全局结构体,类似全局变量,在它之后声明的所有函数都可以使用),也可以放在函数内(此时为局部结构体,类似局部变量,只能放在该函数内使用,如果与全局结构体同名,则会暂时屏蔽全局结构体)。


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

当我们声明结构体的类型之后,接下来就要对结构i进行定义和初始化了。

struct student
{
	char name[20];
	int age;
	char sex[5];
	char id[20];
}s1,s2;           //声明类型的同时定义结构体变量
 
//定义结构体变量
struct student s3;
struct student s4;
int main()
{
	return 0;
}

上面的s1,s2,s3,s4就是普通的变量,放在全局中就是全局变量,刚在函数内部就是局部变量。
接下来看结构体初始化:

struct student
{
	char name[20];
	int age;
	char sex[5];
	char id[20];
}s1 = { "zhuxinrui",21,"女","21006666" };
int main()
{
	//初始化:定义变量的同时赋值
	struct student s2 = { "yangrui",21,"女","210047218" };
	return 0;
}

1.typedef关键字

当我们每次定义结构体变量时,结构体的类型名过长,想要简化可以使用typedef来对结构体类型重定义

1:>

#include<stdio.h>
typedef struct student stu;
struct student
{
	char name[20];
	int age;
	char sex[5];
	char id[20];
};
int main()
{
	stu s3 = { "yangrui",21,"女","210047218" };
	return 0;
}

2:>

#include<stdio.h>
typedef struct student
{
	char name[20];
	int age;
	char sex[5];
	char id[20];
}stu;
int main()
{
	stu s4 = { "yangrui",21,"女","210047218" };
	return 0;
}

2.匿名结构体

匿名结构体类型是指声明结构体的时候,可以不完全的声明

struct 
{
	int num;
};

那么问题来了,匿名结构体类型该如何定义变量呢?

错误写法

struct
{
	int num;
};
 
struct n1;
struct n2 = { 666 };

正确做法

struct
{
	int num;
}n1,n2={666};

总结:
必须在声明匿名结构体类型时就定义变量。

四、结构体传参

当我们将结构体变量作为为函数参数进行传参的时候,该怎样接收并使用呢?

用法示例

结构体打印函数

#include<stdio.h>

typedef struct teacher T;
typedef struct student S;

struct teacher
{
	char name[20];
	char subject[20];

};

struct student
{
	char name[20];
	int age;
	char sex[5];
	char id[20];
	T t1;
};

S s1 = { "阿蕊",20,"女","21006666",{"老王","语文"} };


void print1(S s)
{
	printf("%-8s %-2d %s %s %s %s\n", s.name, s.age, s.sex, s.id, s.t1.name, s.t1.subject);
}

void print2(S* s)
{
	printf("%-8s %-2d %s %s %s %s\n", (*s).name, (*s).age, (*s).sex, (*s).id, (*s).t1.name, (*s).t1.subject);
}

int main()
{
	S s2 = { "小羊",21,"女","210047218",{"老丁","英语"} };
	print1(s1);
	print2(&s2);
	return 0;
}

问题来了,想一想print1和print2这两个函数,哪个更好呢?

小伙伴们想好了或者想不明白的可以问小羊,也可以评论区留言哦,最后希望这篇文章对大家在C语言的学习道路上有所帮助,大家跟好脚步,咱们很快就会跟新C语言进阶的内容了~

『C语言初阶』第九章 -结构体,C语言初阶知识,c语言,c++文章来源地址https://www.toymoban.com/news/detail-650796.html

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

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

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

相关文章

  • 软考A计划-真题-分类精讲汇总-第九章(数据结构与算法基础)

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、游戏等) 有什么需要

    2024年02月05日
    浏览(51)
  • 【初始C语言8】详细讲解初阶结构体的知识

    💓作者简介: 加油,旭杏,目前大二,正在学习 C++ , 数据结构 等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏👀 🚚代码仓库:旭日东升 1👀 🌹欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖         在上一章中,我们浅浅地学习了初阶指针的相

    2024年02月08日
    浏览(34)
  • mysql 第九章

    目录 1.mha 搭建  2.总结 主从同步: 安装 mha 软件:  mha 模拟 vip 飘移、master 切换:         mha  是一套优秀的 mysql 高可用环境下故障切换和主从复制的软件。mha 解决 mysql 单点的问题。mysql 故障切换过程中,mha 能做到 0-30 秒内自动完成故障切换操作。mha 能在故障切换的过

    2024年02月16日
    浏览(31)
  • 【OpenCV】第九章: 图像梯度

    第九章: 图像梯度 图像梯度是用来做 边缘检测 的一种方法。 为什么要检测边缘? 比如自动驾驶里面,我们至少要做的一个工作就是道路的边缘检测,只有正确的检测到道路的边缘我们的车才会行驶在道路上而不是开到马路牙子外。 或者从另一个角度解释,我们做边缘检测

    2024年01月24日
    浏览(30)
  • 第九章:Java常用类

    目录 9.1:字符串相关的类:String         9.1.1:String用法         9.1.2:String方法         9.1.3:String与char[]、byte[]之间的转换         9.1.4:StringBuffer和StringBuilder的使用 9.2:JDK 8之前的日期时间API 9.3:JDK 8中新日期时间API         9.3.1:LocalDate、LocalTime、LocalDateTime的使

    2024年02月09日
    浏览(29)
  • 第九章 番外篇:TORCHSCRIPT

    下文中的代码都使用参考教程中的例子。 会给出一点自己的解释。 参考教程: mixing-scripting-and-tracing script and optimize for mobile recipe https://pytorch.org/docs/stable/jit.html OPTIMIZING VISION TRANSFORMER MODEL FOR DEPLOYMEN 我们训练好并保存的pytorch,支持在python语言下的使用,但是不支持在一些

    2024年02月10日
    浏览(28)
  • 第九章 Gitlab使用

    微服务项目,常常需要多人协作完成工作,本章教程是介绍Gitlab使用,使多人协作告别低端的手动拷贝,也告别传统的SVN。 https://git-scm.com/download/win ssh-keygen -t rsa -C “zhangsan@163.com” -b 4096 cat ~/.ssh/id_rsa.pub | clip 打开git bash窗口 定位到要上传的目录 初始化 将当前目录添加到

    2024年01月18日
    浏览(40)
  • 第九章 shell 编程

    第九章 shell 编程 一、 编写与执行 Shell 脚本 • shell 脚本的作用类似于 DOS 的批处理文件,但无文件名规定。 • shell 脚本是文本文件,可用 vi、gedit 或其它文本编辑去创建。 • 脚本的首行应是#!/bin/sh,指明该用什么程序来解释该脚本。 • 使用 chmod +x 命令为脚本文件增加可

    2024年02月06日
    浏览(51)
  • 第九章 支持、解释

    真题(2010-40)-加强支持-分类1-反面支持-否命题加强-支持力度:反面>正面-多项递推,选支持最终项 40.鸽子走路时,头部并不是有规律地前后移动,而是一直在往前伸。行走时,鸽子脖子往前一探,然后头部保持静止,等待着身体和爪子跟进。有学者曾就鸽子走路时伸脖子

    2024年02月08日
    浏览(33)
  • 第九章 排序

    1.插入类排序:是在一个已排好序的记录子集的基础上,每一步将下一个待排序的记录有序插入已排好序的记录子集,直到将所有待排记录全部插入为止 a.直接插入排序(稳定) b.折半插入排序(稳定) c.希尔排序(不稳定) 2.交换类排序:通过一系列交换逆序元素进行排序

    2024年02月02日
    浏览(25)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包