扬中零壹网站建设科技公司 网站设计经典案例

diannao/2026/1/24 14:59:57/文章来源:
扬中零壹网站建设,科技公司 网站设计经典案例,企业网站的制作成本,好看的网站颜色✈结构体类型的声明 前面我们在学习操作符的时候#xff0c;已经学习了结构体的知识#xff0c;这里稍微复习一下。 #x1f680;结构体回顾 结构是一些值的集合#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 #x1fa82;结构的声明 例如已经学习了结构体的知识这里稍微复习一下。 结构体回顾 结构是一些值的集合这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构的声明 例如 struct stu {char name[10];//名字int age;//年龄char sex;//性别 }zhangsan;结构体变量的创建和初始化 struct stu {char name[10];//名字int age;//年龄char sex[5];//性别 };int main() {//按照顺序初始化struct stu s { 张三,30,男 };printf(name:%s\n, s.name);printf(age:%d\n, s.age);printf(sex:%s\n, s.sex);//按照指定顺序初始化struct stu s2 { .age 20,.name 李四,.sex 男 };printf(name:%s\n, s2.name);printf(sex:%s\n, s2.sex);printf(age:%d\n, s2.age);return 0; } 结构的特殊声明 在声明结构的时候可以不完全的声明。 比如 struct {char a;float b;int c; }x;struct {char a;float b;int c; }a[20],*p;上面的两个结构在声明的时候省略掉了结构体标签tag 那么问题来了 在上面代码的基础上下面的代码合法吗 p x; 警告 编译器会把上面的两个声明当成完全不同的两个类型所以是非法的。 匿名的结构体类型如果没有对结构体类型重命名的话基本上只能使用一次。 结构的自引用 在结构中包含一个类型为该结构本身的成员是否可以呢 比如定义一个链表的节点 struct Node {int data;struct Node next; }; 上述代码正确吗如果正确那 sizeof(struct Node是多少 仔细分析其实是不行的因为一个结构体中再包含一个同类型的结构体变量这样结构体变量的大 小就会无穷的大是不合理的。 正确的自引用方式 struct Node {int data;struct Node* next; }; 在结构体自引用使用的过程中夹杂了typedef对匿名结构体类型重命名也容易引入问题看看 下面的代码可行吗 typedef struct {int data;Node* next; }Node; 答案是不行的因为Node是对前面的匿名结构体类型的重命名产生的但是在匿名结构体内部提前使用Node类型来创建成员变量这是不行的。 解决方案如下定义结构体不要使用匿名结构体了 ✈结构体内存对齐 我们已经掌握了结构体的基本使用了。 现在我们深入讨论一个问题计算结构体的大小。 这也是一个特别热门的考点结构体内存对齐 对齐规则 首先得掌握结构体的对齐规则:1.结构体的第一个成员对齐到和结构体变量起始位置偏移量为0的地址处 2.其他成员变量要对齐到某个数字对齐数的整数倍的地址处。 对齐数编译器默认的一个对齐数与该结构体成员变量大小的较小值。VS中默认的对齐数为8。  -Linux中gcc没有默认对齐数对齐数就是成员自身的大小 3.结构体总大小为最大对齐数结构体中每个成员变量都有一个对齐数所有对齐数中最大的的 整数倍。 4.如果嵌套了结构体的情况嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处结构 体的整体大小就是所有最大对齐数含嵌套结构体中成员的对齐数的整数倍。 练习 //练习1 int main() {struct S1{char c1;int i;char c2;};printf(%d\n, sizeof(struct S1));return 0; } 解析 int main() {//练习1struct S1{char c1;//char类型占1字节偏移量为0int i;//int类型占4字节因此对齐数为4由于第二条对齐规则偏移量为4char c2;//char类型占1字节偏移量为8//由于第三条对齐规则结构体类型的大小为12};printf(%d\n, sizeof(struct S1));return 0; }int main() {// 练习2struct S2{char c1;char c2;int i;};printf(%d\n, sizeof(struct S2));return 0; } 解析 int main() {//练习2struct S2 {char c1;//char类型占1字节偏移量为0char c2;//char类型占1字节由于第二条对齐规则偏移量为1int i;//int类型占4字节由于第二条对齐规则偏移量为4//结构体类型的大小为8};printf(%d\n, sizeof(struct S2));return 0; } int main() {//练习3struct S3{double d;char c;int i;};printf(%d\n, sizeof(struct S3)); } 解析 int main() {//练习3struct S3{double d;//double类型占8字节偏移量为0char c; // char类型占1字节因此对齐数为1偏移量为8int i;//int类型占4字节因此对齐数为4由于第二条对齐规则偏移量为12};//结构体类型的大小为16printf(%d\n, sizeof(struct S3)); } int main() {//练习4-结构体嵌套问题struct S3{double d;char c;int i;};struct S4{char c1;struct S3 s3;double d;};printf(%d\n, sizeof(struct S4));return 0; }解析 int main() {//练习4-结构体嵌套问题struct S3{double d;//double类型占8字节偏移量为0char c; // char类型占1字节因此对齐数为1偏移量为8int i;//int类型占4字节因此对齐数为4由于第二条对齐规则偏移量为12};//结构体类型的大小为16struct S4{char c1;// char类型占1字节因此对齐数为1偏移量为0struct S3 s3;//struct S3类型占16字节因此对齐数为8由于第二条对齐规则偏移量为8double d;//double类型占8字节因此对齐数为8由于第四条对齐规则偏移量为24};//结构体类型大小为32printf(%d\n, sizeof(struct S4));return 0; } 为什么存在内存对齐 大部分的参考资料都是这样说的 1.平台原因移植原因) 不是所有的硬件平台都能访问任意地址上的任意数据的某些硬件平台只能在某些地址处取某些特定类型的数据否则抛出硬件异常。 2.性能原因 数据结构尤其是栈)应该尽可能地在自然边界上对齐。原因在于为了访问未对齐的内存处理器需要作两次内存访问而对齐的内存访问仅需要一次访问。假设一个处理器总是从内存中取8个字节则地址必须是8的倍数。如果我们能保证将所有的double类型的数据的地址都对齐成8的倍数那么就可以用一个内存操作来读或者写值了。否则我们可能需要执行两次内存访问因为对象可能被分放在两个8字节内存块中。 总体来说结构体的内存对齐是拿空间来换取时间的做法。 那在设计结构体的时候我们既要满足对齐又要节省空间如何做到: 让占用空间小的成员尽量集中在一起例如S1和S2类型的成员一模一样但是S1和S2所占空间的大小有了一些区别。 修改默认对齐数 #pragma这个预处理指令可以改变编译器的默认对齐数。 #pragma pack(1)//修改默认对齐数为1 struct s {char a;int b;char c; }; #pragma pack()//取消修改还原为默认 int main() {printf(%d, sizeof(struct s));return 0; }结构体在对齐方式不合适的时候我们可以自己更改默认对齐数。 ✈结构体传参 struct S {char name[10];int age;char sex[5]; };void print1(struct S s) {printf(%d, s.age); }void print2(struct S* ps) {printf(%d, ps-age); }struct S s { 张三,10,男 };int main() {print1(s);print2(s);return 0; } 上面的print1和print2函数哪个好些 答案是首选print2函数。原因 函数传参的时候参数是需要压栈会有时间和空间上的系统开销。 如果传递一个结构体对象的时候结构体过大参数压栈的的系统开销比较大所以会导致性能下降。结论 结构体传参的时候要传结构体的地址。 ✈结构体实现位段 结构体讲完就得讲讲结构体实现 位段的能力。 什么是位段 位段的声明和结构是类似的有两个不同: 位段的成员必须是 int、unsigned int 或signed int在C99中位段成员的类型也可以选择其他类型。位段的成员名后边有一个冒号和一个数字。 例如 struct s {int a : 2;int b : 5;int c : 8;int d : 10; }; A就是一个位段类型。 那位段A所占内存的大小是多少 int main() {printf(%d, sizeof(struct s));return 0; } 位段的内存分配 1.位段的成员可以是int unsigned int signed int 或者是char等类型 2.位段的空间上是按照需要以4个字节int或者1个字节char的方式来开辟的。 3.位段涉及很多不确定因素位段是不跨平台的注重可移植的程序应该避免使用位段。 struct S {char a : 3;char b : 4;char c : 5;char d : 4; }; struct S s { 0 }; s.a 10; s.b 12; s.c 3; s.d 4;位段的跨平台问题  1. int 位段被当成有符号数还是无符号数是不确定的 2.位段中最大位的数目不能确定。16位机器最大1632位机器最大32写成27在16位机器会 出问题。 3.位段中的成员在内存中从左向右分配还是从右向左分配标准尚未定义。 4.当一个结构包含两个位段第二个位段成员比较大无法容纳于第一个位剩余的位时是舍弃 剩余的位还是利用这是不确定的。 总结 跟结构相比位段可以达到同样的效果并且可以很好的节省空间但是有跨平台的问题存在。 在VS中 1. int 位段被当成有符号数 2.位段中的成员还是从右向左分配 3.当一个结构包含两个位段第二个位段成员比较大无法容纳于第一个位剩余的位时则舍弃 剩余的位 位段的应用 下图是网络协议中IP数据报的格式我们可以看到其中很多的属性只需要几个bit位就能描述这里使用位段能够实现想要的效果也节省了空间这样网络传输的数据报大小也会较小一些对网络的畅通是有帮助的。 位段使用的注意事项 位段的几个成员共有同一个字节这样有些成员的起始位置并不是某个字节的起始位置那么这些位置处是没有地址的。内存中每个字节分配一个地址一个字节内部的bit位是没有地址的。 所以不能对位段的成员使用操作符这样就不能使用scanf直接给位段的成员输入值只能是先输入放在一个变量中然后赋值给位段的成员。 struct A {int _a : 2;int _b : 5;int _c : 10;int _d : 30; }; int main() {struct A sa { 0 };scanf(%d, sa._b);//这是错误的//正确的⽰范int b 0;scanf(%d, b);sa._b b;return 0; }

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

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

相关文章

提供医疗网站建设河南多用户商城开发

何为Wiki(维客)? 首先,我们要搞清楚:wiki概念的发明人是Ward Cunningham。wiki这个字到底是什幺意思呢?根据FAQ的说法,WikiWiki 一词来源于夏威夷语的“wee kee wee kee”,原本是“快…

网站推广策划公司汽车之家官方网站

java过滤器(imooc学习)定义:过滤器是一个服务器端的组件,它可以截取用户端的请求与响应信息,并对这些信息过滤。 工作原理 1、过滤器中web容器启动时就进行加载2、过滤器存在于用户请求和web资源之间3、用户请求和web资源响应的【收发】都经过…

福清市建设局官方网站重庆巫山网站设计哪家专业

网页环境title标题每一帧都不要放过&#xff0c;或许那个不起眼的地方就存在重要信息到这并未发现什么重要信息&#xff0c;F12看看在源代码底部发现PHP代码&#xff1a; <!-- $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } --> PHP代码…

衡水建网站wordpress招聘模板

Windows 系统 在 Windows 系统中想要合并 PDF 文件我们可能需要借助一些第三方的软件或者浏览器的插件。 我们可以在 Google 浏览器中的 Chrome 应用商店中输入“Merge pdf”这样就可以搜索到在线合并 PDF 文件的插件&#xff0c;只需要下载到浏览器中就可以直接使用。当然 Ed…

捕鱼网站怎么做在线教育平台系统搭建

一、与公司形象契合 在展厅规划时必定要留意公司的LOGO、主色调&#xff0c;以及企业文明。在展现时使用丰满的展厅规划传达出企业的理念。而在功用设置上&#xff0c;应当考虑内涵功用&#xff0c;从展厅作业人员的视点动身&#xff0c;为展厅作业人员提供杰出的环境&#xff…

横向网站模板h5美食制作网站模板

奈氏准则 在理想低通&#xff08;无噪声&#xff0c;带宽受限&#xff09;条件下&#xff0c;为了避免码间串扰&#xff0c;极限码元传输速率为2WBaud&#xff0c;W是信道带宽&#xff0c;单位是赫兹 结论&#xff1a; ①在任何信道中&#xff0c;码元的传输速率是有上限的&…

做搜狗网站优化首页软我要自学网网站开发

参考链接&#xff1a; Java流Stream 题解 使用 toUnsignedString&#xff08;&#xff09;即可 我有仔细读过toUnsignedString&#xff08;&#xff09;&#xff0c;有兴趣可以看看 第3章 java的基本程序设计结构【补缺学习】【注释与数据类型】【核心技术卷I】 impor…

360网站卖东西怎么做电商系统开发公司

1.模仿 STM32 寄存器定义 为了开发方便&#xff0c; ST 官方为 STM32F103 编写了一个叫做 stm32f10x.h 的文件&#xff0c;在这个文件 里面定义了 STM32F103 所有外设寄存器&#xff0c;我们可以使用其定义的寄存器来进行开发&#xff0c;比如我 们可以用如下代码来初始…

商城开发网站无锡高端网站设计

地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里&#xff0c;有一座宫殿。宫殿里有个四四方方的格子迷宫&#xff0c;国王选择驸马的方法非常特殊&#xff0c;也非常简单&#xff1a;公主就站在其中一个方格子上&#xff0c;只要谁能用地毯将除公主站立的地方外的所有地…

用rem做移动网站电脑室内装修设计软件

最近在复习数据结构,早上刚复习完链表&#xff0c;就想到了学生信息管理系统这个经典的大作业,然后呢&#xff0c;花了一早上加一中午的功夫给重新实现了一遍&#xff0c;里面可能会有写的不好的地方&#xff0c;但也代表了我实现的一些想法&#xff0c;在这里我将分享出来。我…

网站空间内存我的世界做壁纸的网站

目录 前言&#xff1a; 题单&#xff1a; P3386 【模板】二分图最大匹配 P1525 [NOIP2010 提高组] 关押罪犯 P3385 【模板】负环 P3371 【模板】单源最短路径&#xff08;弱化版&#xff09; SPFA写法 Dij写法&#xff1a; P3385 【模板】负环 P5960 【模板】差分约束…

中小学生做试卷的网站6阿联酋网站后缀

当我们使用float来使元素并排显示的时候&#xff0c;可以使用margin来控制元素之间的距离&#xff0c;而在很多版式里&#xff08;例如产品图片的列表&#xff09;&#xff0c;需要浮动的元素达到两端对齐的效果&#xff0c;如图1所示。 图1 两端对齐的版式 单纯使用float:left…

做美食直播哪个网站最好网站备案不通过怎么解决

RTlinux主要的api函数实时应用程序分为两部分,内核部分和应用部分,应用部分需要和内核部分通过FIFO进行数据交换和控制,除此之外和一般应用程序没有太多区别,内核部分比较复杂,程序以模块方式挂入内核,这部分程序的编写需要对底层的东西有较高的要求,除了掌握RTLinux的API以外还…

Mac怎么搭建网站开发环境科技创新导报

一、JVM 1、jvm的内存组成 五大内存区域&#xff0c;分1.7和1.8 1.堆内存&#xff1a;引用类型的数据&#xff0c;内部组成&#xff1a;1.新生代&#xff08;伊甸区和幸存者区&#xff09;2.老年代。该区域经常发生垃圾回收的操作 堆是JVM中最大的一块内存区域&#xff0c;用…

网站开发研发工程师岗位职责成都网站推广哪家专业

1. ActionContext ActionContext是被存放在当前线程中的&#xff0c;获取ActionContext也是从ThreadLocal中获取的。所以在执行拦截器、 action和result的过程中&#xff0c;由于他们都是在一个线程中按照顺序执行的&#xff0c;所以可以可以在任意时候在ThreadLocal中获取 Act…

免费企业自助建站信息发布网网络营销的主要内容是什么

💡本篇内容:YOLOv8改进PIoU损失函数:PIoU v2损失增强了专注于中等质量锚盒的能力,v1版本使用非单调聚焦机制更直接、更快的边界框回归损失 💡附改进源代码及教程,用来改进🚀PIoU损失函数 Powerful-IoU损失函数论文地址:https://www.sciencedirect.com/science/art…

淘客网站开发源代码wordpress漂亮手机网站模板

之前的文章记录了oracle客户端和服务端的下载与安装&#xff0c;内容参见&#xff1a; 在Windows中安装Oracle_windows安装oracle 如果不想安装oracle客户端&#xff08;或者是电脑因为某些原因无法安装oracle客户端&#xff09;&#xff0c;还想能够连接oracle远程服务&#…

健网站怎样建十大ui培训机构

DB-GPT&#xff1a;彻底改变数据库与私有LLM技术的交互 智能SQL生成&#xff1a;后端技术与LLM的完美结合 智能SQL生成&#xff1a;后端技术与LLM的完美结合_llm sql-CSDN博客 GitHub - eosphoros-ai/DB-GPT: AI Native Data App Development framework with AWEL(Agentic Wor…

后台网站下载做高端网站建设公司

学习了解PHP中Memcached扩展的使用 说实话&#xff0c;在目前的开发环境中&#xff0c;使用 Memcache 的项目还真的不多。在 Redis 大行其道的今天&#xff0c;Memcache 的衰退也可以说是大势所趋。不过&#xff0c;可能很多刚开始学习 PHP 的新同学不知道&#xff0c;当年在 L…

皮具网站设计把WordPress搬家

广度优先搜索&#xff08;BFS&#xff09;在JavaScript编程中有许多实际应用场景&#xff0c;特别是在解决图、树等数据结构相关问题时非常常见。在JavaScript中&#xff0c;可以使用队列来实现广度优先搜索算法。通过将起始节点加入队列&#xff0c;然后迭代地将节点的邻居节点…