| |
|
开发:
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语言自建结构 -> 正文阅读 |
|
[C++知识库]c语言自建结构 |
结构:?? ????结构是由程序员自己设计的数据类型,用于描述一个事物的各项数据,由若干个基础类型组成 ????设计: ????typedef?struct?结构体名 ????{ ????????类型1?成员名1; ????????类型2?成员名2; ????????... ????}新名字; ????typedef?struct?Teacher?Teacher; ????定义结构变量: ????????struct?结构体名?变量名; ????????注意:在定义结构变量时struct不能省略 ????????结构体变量初始化: ????????????struct?结构体名?变量名={v1,v2...}; ????????????注意:必须要根据成员设计的顺序初始化,初始化省略只能从后面开始,不能直接省略中间的 ????????????struct?结构体名?变量名={.成员名1=v1,.成员名3=v3,...} ????????????只初始化某些成员,可以不用按顺序初始化 ????????????struct?Student?stu1=stu2;??同类型的结构体变量可以直接给结构体变量初始化丶赋值 ????????访问成员: ????????????变量名.成员名 ????????????结构指针->成员名 ????????????结构变量作为形参时:结构体字节数较大,值传递效率低,传指针效率高,不需要改值加const保护 ????????????练习1:设计一个教师结构体,成员有姓名?性别?工号?工龄?定义一个教师结构体变量,使用scanf输入各个成员的值并显示 ????????????注意:结构体变量一般较大,最好存在堆内存 ????如何计算结构体的字节数: ????????结构体成员的顺序会影响总字节数 ????????内存对齐:假定第一个成员从0开始,存储每个成员的地址编号必须满足能被该成员字节数整除,不能则补空白字节 ????????内存补齐:结构体的总字节数要求必须是最大成员的字节数(在linux系统下最大字节数超过4字节按4字节算,但windows下多大就多大)的整数倍,如果不是则在末尾填充空白字节 ????????linux下??#pragma?pack(n)?最大字节超过n按n算,只能放1,2,4(因为n要小于等于4) ????????windows下?该宏定义没用? 联合:union?????使用少量内存对应多个标识符来节约内存,现在基本不用(没有内存对齐,有内存补齐) ????联合与结构的使用方法基本一致,区别在于所有成员公用一块内存,一个成员的值发生改变,其他成员也会跟着改变 ????union?Data ????{ ????????char?ch[5]; ????????int?num; ????}; ????字节数为8 ????如何判断操作系统的大小端(高位数据存低位地址为大端,反之) ????个人计算机系统一般都是小端系统,unix服务器和网络设备都是大端系统 ????本地字节序是小端模式,网络字节序是大端模式 ????序列化(上传时将小端转成大端)和反序列化(网上下载时将大端转成小端)(json\xml) 枚举:enum??用处:给数值起一个有意义的名字,提高可读性,相对于宏常量安全性更高 ????枚举就是把一种数据类型可能出现的值全罗列出来,取一个有意义的名字,(除此之外的数据如果赋值给该枚举变量就是非法的)? ????可以看做值受限的int类型,c编译器为了效率不检查,所以c语言的枚举变量可以当int类型变量使用,一般会直接使用起好名字的枚举成员 ????enum?Direction ????{ ????????UP=183, ????????DOWN=184, ????????RIGHT=185, ????????LEFT=186, ????}; ????enum?Direction?key=UP; ????UP=100;报错,不可更改 enum?d? { ????a,b,c }; 则abc分别为0?1?2 enum?d? { ????a=5,b,c }; 则abc分别为5?6?7 enum?d? { ????a,b=5,c }; 则abc分别为0?5?6 全局变量初始化时不能调用函数 int*?p=malloc(40)?错误 |
|
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/23 5:55:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |