结构体基础知识
来源:互联网 发布:什么是淘宝网店 编辑:程序博客网 时间:2024/06/05 06:03
1.首先我们来认识一下什么是结构体~
其实,结构体就是一些值的集合。我们把这些值称为它的成员,一个结构体的各个成员可能具有不同的类型。
结构体的形式如下:
第一种:只有结构体定义
struct 结构名
{
成员表列
};
例如:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
第二种:附加该结构体类型的“结构体变量”的初始化的结构体定义
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
2.结构体的初始化
struct 结构体名 变量名={初始数据表};
一般状态下:无名结构体不可以定义局部变量。(无名结构体没有类型名)
对上述例子进行初始化:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
3.结构体的声明:
举例说明:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
这个声明创建了一个名叫x的变量,包含了三个成员:一个整数,一个字符,一个浮点数;
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
这个创建了y和z。其中y是一个数组,包含20个结构,z是一个指针,指向这个类型的结构。
声明结构时也可以用typedef创建一种新的类型,例如:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
4.对于上面提到的typedef大家可能还有点懵,那么下来我们就来探讨一下结构体的typedef
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。具体戳下面哦~
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
于是在声明变量的时候就可:Stu stu1;
如果没有typedef就必须用struct Student stu1;来声明
这里的Stu实际上就是struct Student的别名。
5.结构体的访问操作
1)直接访问 (.)
点操作符(.),点操作符接受两个操作数,形式为:结构变量名.访问的成员名
2)间接访问 —>
箭头操作符—>,左操作符必须是一个指向结构的指针,箭头操作对左操作数执行间接访问取得指针所指向的结构,然后和点操作符一样,根据右操作符数选择一个指定的结构成员
6.结构体的内存存储
分配三原则:
1)结构的第一个成员永远放在结构的0偏移处;
2)从第二个成员开始,都要对齐到某个对齐数的整数倍处;
注:对齐数:结构成员自身大小和默认对齐数的较小值
默认对齐数:vs环境下:8位 Linux环境下:4位
3)结构的总大小必须是最大对齐数的整数倍。
下面举例说明:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
上面结构的总代小为16,具体实现见下图:
7.内存对齐的原因:
(1).平台原因:不是所有的硬件平台都能访问任意地址上的任意数据;某些硬件平台只能在某些地址处取某些特定类型的数据,否则将抛出硬件异常。
(2).性能原因:数据结构应该尽可能的在自然边界上对齐。为了访问未对齐的内存,处理器需要作两次内存访问,而对齐的内存访问仅需要一次访问。
- struct结构体基础知识
- 结构体基础知识
- 结构体基础知识
- C语言结构体基础知识
- IOS 基础知识 Foundation--结构体
- 数据结构基础知识之结构体
- C语言复习之结构体基础知识
- C语言复习之结构体基础知识
- C语言复习之结构体基础知识
- C语言复习之结构体基础知识
- C语言基础知识----联合 && 枚举 && 结构体
- C#基础知识之结构体(Struct)
- 程序员必须弄懂结构体,结构体基础知识
- 位图结构和基础知识
- ACMer基础知识结构
- 三层结构基础知识
- 【Unity】基础知识结构总结
- Unity基础知识结构总结
- linux gentoo gnome任务栏(panel)消失的解决办法
- 《学习OpenCV》第四章第6题
- 开源框架:DBUtils使用详解
- 运行dubbo-admin走到zkclient.ZkEventThread
- Ubuntu 修改Apache2端口
- 结构体基础知识
- android面试题
- Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
- 什么是 Node.js ?
- Java Object 基类
- ccf-201412-1 门禁系统
- 未来十年商业风云--浅谈未来发展
- 启动获取安全策略文件服务出错-tomcat
- 前后端分离实践(一)---转自 张亚涛