| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言 结构体struct知识点(万字详细总结) -> 正文阅读 |
|
[C++知识库]C语言 结构体struct知识点(万字详细总结) |
C语言提供了一些由系统提供好的数据类型,如:int,float,char等,用户可以在程序中用他们定义变量,解决一般的问题,但是在实际问题中只有这些数据类型是不够的,有时候我们需要其中的几种一起来修饰某个变量,在此情况下,使用简单的基本数据类型甚至是数组都是很困难的;我们就需要自己建立一些数据类型,并用它来定义变量。
我们以一个学生信息为例来说明
上述代码Student 是自定义的结构体名,与struct构成一个新的类型名,name ,sex,age,num,score是结构体内的各个成员,对于成员都应进行类型声明,即 类型名 成员名; 上述结构体的组织结构: 声明一个结构体类型的一般形式为:
说明:
对于说明的第二点进行举例
这个结构体的组织结构为:
之前结构体的声明只是告诉编译器该如何表示数据,但是它没有让计算机为其分配空间。我们要使用结构体,那么就需要创建变量,也就是结构体变量。 1.先定义类型,在定义变量:
最常用的方法,较直观。 2.定义类型的同时定义变量
是形式一的简略形式。 3.直接定义结构体变量,省略结构体名
但要注意的是这样的方式虽然简单,但不能再次定义新的结构体变量了。 说明:
所谓结构体变量初始化,就是定义结构体变量的同时,对其成员变量赋初值,在赋初值时应注意按顺序及类型依次为每个结构体成员指定初始值。 结构体变量的初始化一般格式如下: struct 结构体名 结构体变量={初始化值的列表}; 说明:
对于说明的第二点进行验证:
结构体就像一个超级数组,在这个超级数组内,一个元素可以是char类型,下个元素就可以是flaot类型,再下个还可以是int数组型,这些都是存在的。在数组里面我们通过下标可以访问一个数组的各个元素,那么如何访问结构体中的各个成员?
1.访问结构体普通变量成员的一般形式: 结构体变量名.成员名 结构体变量名->成员名
结构体对齐规则:
分析以下结构体的大小:
一般认为是13个字节其实不是; 2)
注意: 第二种情况结构体内依次为char int short
在上面的student类型的结构体 ,每本书就需要用一个student类型的结构体变量来描述,若是要描述两个学生,需要使用两个这样的变量,依次类推;因此要使用一个该结构体的数组,来表示这些学生;并且数组就是存储一组具有相同类型的数据,因此就有了结构体数组的出现。
结构体数组的定义方式与结构体变量的定义方式类似; struct 结构体名 例如:定义一个结构体数组stud,它有五个元素,每个元素都是struct student类型。
结构体数组在定义时也可以进行初始化,一般形式是在定义之后用花括号括起来的多组初始数据。 struct 结构体名 结构体数组名 ={初始化值};
一般形式: 数组名[下标].成员名 例如:
说明:
所谓结构体指针就是指向结构体变量的指针,一个结构体变量的起始地址就是这个结构体变量的指针。如果把一个结构体变量的起始地址存放在一个指针变量中,那么,这个指针变量就指向该结构体变量。 我们知道,指针指向的是变量所占内存的首地址,在结构体中,指针指向的是结构体变量的起始地址,当然也可指向结构体变量的元素
定义形式一般为: struct 结构体名 指针名; 指针变量的基类型必须与结构体变量的类型相同。
用结构体指针变量访问结构体变量成员的方法在六.结构体变量成员的访问中提到过有两种:
这两种表示方法均正确。
我们想要用指针访问结构体数组的第n个数据时可用
注意区分(++p)->num 和 (p++)->num
首先我们要注意的一点,使用结构体变量作为函数参数的时候,采取的是值传递的方式,将结构体所占内存单元的内容全部传递给形参,并且形参必须也要是同类型的结构体变量,在使用时,会自动创建一个结构体变量作为原变量的副本,并且也需要占内存,并且在调用期间如果修改(形参)结构体中成员的值,修改值是无效的,将一个结构体变量的值传递给一个函数,有3个方法:
我们有的时候会想用同一段内存单元存放不同类型的变量,这种使几个不同的变量共享同一内存的结构,称为共用体类型的结构。
union 共用体名 上图的联合体:
结构体变量所占内存长度为给成员所占内存长度的和,而共用体所占内存长度等于最长成员的长度,例如上面的union Data中a,b,c各占4个字节而不是9个字节。
只有先定义了共用体后才可以引用,不能引用共用体变量,只能引用共用体变量中的成员。
并且a的存储区可以按不同类型存放数据,有不同的长度仅写变量名,系统无法知道应输出哪一个成员的值,所以后面的写法为正确的。
判断平台是大端还是小端
这里有个故事
如果一个变量只有几种可能的值,则可以定义为枚举类型。
所谓枚举就是把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。
声明枚举类型的一般形式为: enum [枚举名] {枚举元素列表}; 例如:
说明:
对说明2进行详细解释:
typedef 作用:给已有的数据类型定义新类型名。
说明:
小白一枚 可能有的地方会有一些错误 欢迎指正. |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 11:40:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |