| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 自定义类型:结构体 -> 正文阅读 |
|
[数据结构与算法]自定义类型:结构体 |
目录 结构体1.结构体的声明1.1基础知识结构体是一种复杂的类型,数组是一组相同元素的集合; 结构体也是一些值的集合,结构体的每个成员可以是不同类型。 1.2结构体声明举个栗子
1.3特殊的结构体匿名结构体类型
这种结构体只能使用一次 两个匿名的结构体类型,若对其中一个进行&,构成结构体指针,会不会指代不明确? 注: 编译器会将两个匿名的结构体认为是不同的结构体类型,不会出现指代不明确。 1.4结构体的自引用
答案是这样的自应用违法的。 引入:数据结构 数据在内存中的储存结构: 顺序表:如数组 链表 ?结构体的自引用包括同类型的指针
计算其大小sizeof(struct node)? 为 4+4/8; 1.5 结构体变量的定义及初始化
1.6结构体内存对齐计算结构体内存大小 如何计算?
运行结果:12 ?计算方法: 1.结构体的第一个成员放在结构体变量的变量在内存中储存位置的0偏移量处开始 2.从第二个成员往后的所有成员都放在对齐数(成员大小与默认对齐数中的较小值)的整数倍的地址处 3.结构体的总大小为所有成员对齐数中最大对齐数的整数倍 4.如果是嵌套结构体的情况,嵌套的结构体成员对齐到自己最大对齐数的整数倍处,结构体的整体大小就是最大对齐数的整数倍。 注: vs2019的默认对齐数为 8 ?堆完后其大小为9bit,根据3结论可得其占12bit. 如果将上述结构体成员调换位置: ? ?计算机分配的内存减少到了8bit 故:为减少内存浪费可以将相同类型的成员放在一块 产生内存对其的原因: 1)平台原因(移植问题): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特 2)性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 减少内存浪费的方法 1)相同类型的变量放在一起 2)修改默认对齐数 1.7修改默认对齐数修改默认对齐数使用到了#pragma指令 #pragma pack ( n ) 修改默认对齐数
?求偏移量的库函数 offsetofhttp://www.cplusplus.com/reference/cstddef/offsetof/?kw=offsetof 1.8结构体传参和函数相似,有传值和传址之分,当然传址是更优解
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 1:21:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |