【C语言】结构体详解(一)

目录

1、什么是结构体?

2、结构体成分

3、结构体变量的定义与初始化

3.1、结构体变量的三种定义方式

3.2、结构体变量的初始化

4、结构体成员的访问(两种方式)

4.1、直接访问

4.2、间接访问

5、结构的特殊声明

5.1、不完全声明(匿名)



正文

1、什么是结构体?

先引入我们所熟悉的类型:char、short、int、long等等,这些是C语言提供的内置类型,但我们用单一的内置类型无法描述复杂的对象。

如,描述一个学生,需要描述其名字、年龄、性别、学号等;此时用单一类型是不够的。

为了解决这个问题,C语言增加了结构体这种自定义的数据类型,让程序员可以创造出合适的类型。

定义:

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量,如:标量、数组、指针、或其他结构体。

结构体是用来描述一个复杂对象的,可包含多个属性。

2、结构体成分

请看一下代码:

struct student
{char name[20];//姓名int age;//年龄char sex[5];//性别char id[20];//学号
};

一个结构体中包含:结构体关键字、名字、成员、分号

3、 结构体变量的定义与初始化

3.1、结构体变量的三种定义方式

3.2、结构体变量的初始化

  • 按照结构体成员的顺序初始化

顾名思义,顺序初始化是按照结构体成员的顺序进行的初始化。

  • 乱序初始化

不按照结构体成员的顺序进行初始化,此时需要点明初始化的成员,如下:

.age 代表将年龄初始化为19 

.sex 代表将性别初始化为男

……

4、结构体成员的访问(两种方式)

结构成员访问操作符:.     ->

4.1、直接访问

通过点操作符(.)进行访问

使用方式:结构体变量.成员名

s5.name   :找到结构体变量s5中的成员name 

s5.age   :找到结构体变量s5中的成员age

……

 4.2、间接访问

通过箭头操作符(->)进行访问

使用方式:结构体指针->成员名

定义一个指向结构体的指针,p指向结构体变量s5

p->name  : 相当于 (*p).name

 p->age  : 相当于 (*p).age

5、结构的特殊声明

5.1、不完全声明(匿名)

 匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使用一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL的string容器

string基本概念 string是C风格的字符串,本质上是一个类。 string 和 char* 的区别 char* 是一个指针; string是一个类,内部封装了 char* ,用来管理字符串,是一个 char* 型的容器。 特点 string内部封装了很多成员…

近年来,常见5大软件开发项目管理工具

时代进步,技术进步,汇总下近几年5大常用的软件开发项目管理工具。 1、微软项目管理软件 Microsoft Project(或MSP)是由微软开发销售的项目管理软件程序。软件设计目的在于协助项目经理制定发展计划、为任务分配资源、跟踪进度、管…

LeetCode 双指针专题

11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不…

权限提升-Linux系统权限提升篇VulnhubPATH变量NFS服务Cron任务配合SUID

知识点 1、Web或普通用户到Linux-服务安全配合SUID-NFS 2、普通用户到Linux-环境变量配合SUID-$PATH 3、Web或普通用户到Linux-计划任务权限不当-Cron 章节点: 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 …

字体反爬案例分析与爬取实战

字体反爬案例分析与爬取实战 该案例将真实的数据隐藏到字体文件里,即使获取了页面源代码,也没法直接提取数据的真实值。 案例介绍 案例网站https://antispider4.scrape.center/,爬取电影标题、类别、评分等,代码实现如下&#…

腾讯云docker创建容器镜像及仓库

这里为了尽量简单,直接用腾讯云容器版本服务器 腾讯云有自己的镜像加速地址,速度还可以,单纯拉取容器还是够用的 但是当我push容器出现各种各样问题因为网络原因,国内访问docker官方镜像站非常麻烦,所以使用阿里的镜像…

Mac上设置环境变量PATH

1、 打开终端Terminal。 2、 输入以下命令打开你的shell配置文件,比如bash或zsh。如果你使用的是bash,那么你需要编辑~/.bash_profile或者~/.bashrc文件;如果你使用的是zsh,那么你需要编辑~/.zshrc文件。 open -e ~/.bash_prof…

【C++练级之路】【Lv.17】【STL】set类和map类的模拟实现

快乐的流畅:个人主页 个人专栏:《C语言》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、红黑树(改造版)1.1 结点1.2 迭代器1.2.1 operator1.2.2 operator- - 1.3 本体1.…

安卓开发Gson插件的使用

Gson 是一个流行的 Java 库,用于序列化和反序列化 Java 对象。在 Android 开发中,使用 Gson 插件可以方便地将 Java 对象转换为 JSON 格式,并将 JSON 数据转换回 Java 对象。 以下是使用 Gson 插件的一般步骤: 1. 添加 Gson 库&…

Vite为什么比Webpack快得多?

Vite为什么比Webpack快得多? 在前端开发中,构建工具扮演着至关重要的角色,而Vite和Webpack无疑是两个备受关注的工具。然而,众多开发者纷纷赞誉Vite的速度之快,本文将深入探讨Vite相较于Webpack为何更快的原因&#xf…

c++基础学习第七天(stl)

c基础学习第七天(stl) 文章目录 1、STL初识1.1 、STL的诞生1.2、STL基本概念1.3、STL六大组件2.4 、STL中容器、算法、迭代器1.5、容器算法迭代器初识1.5.1、vector存放内置数据类型2.5.2、 Vector存放自定义数据类型2.5.3、 Vector容器嵌套容器 2、 STL…

企业知识库搭建不再是难题,靠这几个软件就可以了

在当今知识为王的时代,具备一套强大且实用的企业知识库(Knowledge Base)已成为提升工作效率、促进团队合作不可或缺的工具。那么,问题来了,我们该如何搭建一套属于自己的知识库呢?今天,我就给大…

WMware虚拟机配置静态IP

注意:如果是克隆的虚拟机,需要先重新生成mac地址,如下图所示 修改配置文件 :/etc/sysconfig/network-scripts/ifcfg-ens33 注意:1. BOOTPROTO设置为static 2.将下面的IPADDR地址替换为你实际要设置的ip地址 3.NAT模式…

ArrayList 与 List的区别 数组与集合的区别

ArrayList是一种非泛型集合类型,允许用户存储任何数据类型的对象, List 是一种泛型集合类型,允许用户存储声明时 List 指定的数据类型的对象。它是一个非常强类型的集合, var arrayList new ArrayList(); arrayList.Add(1); // …

前端学习<二>CSS基础——13-CSS3属性:Flex布局图文详解

前言 CSS3中的 flex 属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强。其强大的伸缩性和自适应性,在网页开中可以发挥极大的作用。 flex 初体验 我们先来看看下面这个最简单的布局…

软考数据库

目录 分值分布1. 事务管理1.1 事物的基本概念1.2 数据库的并发控制1.2.1 事务调度概念1.2.2 并发操作带来的问题1.2.3 并发控制技术1.2.4 隔离级别: 1.3 数据库的备份和恢复1.3.1 故障种类1.3.2 备份方法1.3.3 日志文件1.3.4 恢复 SQL语言发权限收权限视图触发器创建…

【华为OD机试C++】004:字符串分隔

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例代码 描述 •输…

Ubuntu搭建环境Cmake-Libtorch-Torchvision-PCL-VTK-OpenCV

Ubuntu搭建环境Cmake-Libtorch-Torchvision-PCL-VTK-OpenCV 安装Cmake安装libtorch安装torchvision安装PCL安装PCL的依赖项PCL多版本共存问题编译PCL库程序验证创建CMakeLists.txt 安装VTK安装OpenCV编译OpenCV库编译版本环境配置:程序验证创建opencv_test文件夹 和…

BaseDao封装增删改查(超详解)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍对数据库中表中的数据进行增改删查询,封装一个工具类(BaseDao)的详细使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 &…

动态规划——回文串问题

目录 练习1:回文子串 练习2:最长回文子串 练习3:回文串分割IV 练习4:分割回文串 练习5:最长回文子序列 练习6:让字符串成为回文串的最小插入次数 本篇文章主要学习使用动态规划来解决回文串相关问题&…