当前位置: 首页 > news >正文

网站维护费用包括哪些做电商一年能赚多少钱

网站维护费用包括哪些,做电商一年能赚多少钱,jsp做网站教程,北京百姓网免费发布信息网#x1f466;个人主页#xff1a;Weraphael ✍#x1f3fb;作者简介#xff1a;目前是C语言学习者 ✈️专栏#xff1a;C语言航路 #x1f40b; 希望大家多多支持#xff0c;咱一起进步#xff01;#x1f601; 如果文章对你有帮助的话 欢迎 评论#x1f4ac; 点赞个人主页Weraphael ✍作者简介目前是C语言学习者 ✈️专栏C语言航路 希望大家多多支持咱一起进步 如果文章对你有帮助的话 欢迎 评论 点赞 收藏 加关注 目录一、结构体1.1 前言1.2 结构体的概念1.3 结构的声明1.4 结构的特殊声明1.5 结构的自引用1.6 变量的定义、初始化、访问和传参1.7 ✨结构体内存对齐1.8 修改默认对齐数二、位段2.1 什么是位段2.2 位段的大小2.3 位段的内存分配2.4 位段跨平台问题。三、枚举3.1 枚举的概念3.2 枚举的定义、初始化及使用3.3 枚举的优点3.4 枚举的大小四、联合4.1 联合类型的定义及初始化4.2 联合大小计算4.3 联合的特点一、结构体 1.1 前言 在《C语言初阶》中(初阶结构体传送门)我们浅浅学习了结构体的声明、结构体成员的访问、结构体嵌套和结构体传参。今天这篇博客将带领大家深入学习有关结构体的知识。闲言少叙开快车 1.2 结构体的概念 结构是一些值的集合这些值可以称为成员变量结构的每个成员可以是不同类型的变量。类比数组。数组也是一些值的集合但类型是相同的。 1.3 结构的声明 //结构体的声明 struct tag {member_list; //成员变量 }variable_list;//variable_list - 变量列表 //注意后面的分号不可缺举个例子假设要描述一名学生 可以描述一个学生的名字、性别、学号、成绩、年龄等等。 【第一种声明】 //描述一位学生 struct Stu //Stu - 标签 {char name[10]; //名字int age; //年龄char sex[5]; //性别}s1; //s1 - 结构体变量全局变量 //分号不可缺int main() {struct Stu s2;//结构体变量局部变量 }【第二种声明typedef】 //描述一位学生 typedef struct Stu //Stu - 标签 {char name[10]; //名字int age; //年龄char sex[5]; //性别}Stu; //Stu - 将结构体类型struct Stu重新命名为Stu //分号不可缺int main() {Stu s1; //创建结构体变量全局 }1.4 结构的特殊声明 在声明结构的时候也可以不完全的声明。 【匿名结构体类型(缺少标签)】 注意 若要使用结构体类型在创建类型马上在后面跟上变量如果两个匿名结构体中的成员变量完全一样也会被编译器当成两个完全不同的类型 1.5 结构的自引用 首先先想一个问题在结构中包含一个类型为该结构本身的成员是否可以 【举个例子】 假设要存储1、2、3。可以用链表来存储。一个节点中存储一个数并且当前的节点能够找到下一个节点。所以我们可以把节点定义成一个结构体 【错误代码】 struct Node {int data;struct Node next; };但其实上面的代码是错误的假如说要计算结构体的大小data是4个字节next包含date和下一个节点下个next又包含date和下一个节点…这样下来会发现它的大小其实是very very大的。 【正确代码】 我们可以放一个指向下一个节点的指针也就是结构体指针 struct Node {int data; //4个字节struct Node* next; //4/8个字节 };那么接下来我把代码改成这样是否也是正确的 【错误代码】 typedef struct Node {int data;Node* next; }Node;这其实是错误的因为代码编译是从上到下的当走到Node* next时struct Node还未被typedef重命名 【正确代码】 typedef struct Node {int data;struct Node* next; }Node;1.6 变量的定义、初始化、访问和传参 详情见《初阶结构体》- 传送门 1.7 ✨结构体内存对齐 在了解结构体内存对齐之前我们先想想如何计算结构体的大小 为什么Stu1和Stu2的成员变量一样就仅仅交换了位置结构体大小却不一样这是为什么呢这就要涉及到结构体内存对齐 结构体内存对齐的规则 第一个成员在与结构体变量偏移量为0的地址处其他成员变量要对齐到某个数字对齐数的整数倍的地址处。对齐数 编译器默认的一个对齐数与该成员类型大小的较小值。(VS中默认的值为8Linux环境下无对齐数)结构体总大小为结构体成员最大对齐数的整数倍。如果嵌套了结构体的情况嵌套的结构体对齐到自己的最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数含嵌套结构体的对齐数的整数倍 现在解释开头的代码 以下解析默认是在visual studio环境下 【Stu1】 【Stu2】 如果大家不相信第一个成员在与结构体变量偏移量为0的地址处我们可以来验证。 C语言有一个宏叫offsetof它的功能是计算一个结构体成员相较起始位置的偏移量头文件#include stddef.h 1.8 修改默认对齐数 在《结构体内存对齐》中提到了默认对齐数那么默认对齐数能否修改呢答案是当然可以 可以用#pragma这个预处理指令 那么接下来问题来了怎么恢复呢 二、位段 2.1 什么是位段 位段的声明和结构其实是类似的但有两个不同 位段的成员必须是int、unsigned int 或 signed int但也可以是char类型因为char是属于整型家族的位段的成员名后边有一个冒号和一个数字位段里的成员一般都是同类型的位段的位其实表示二进制位 【举个例子】 #include stdio.h struct segment {int a : 2; //表示a只占内存的2个二进制位int b : 5;//表示b只占内存的5个二进制位int c : 10;//表示c只占内存的10个二进制位int d : 30;//表示d只占内存的30个二进制位 };segment就是一个位段类型。 2.2 位段的大小 结构体的大小计算和位段的计算是一样的吗答案其实是不一样的 位段的计算过程其实是这样的 int是4个字节有32个比特位a占内存2个二进制位还剩下30个比特位b占内存5个二进制位还剩下25个比特位c占内存10个二进制位还剩下15个比特位d占内存30个比特位上一步还剩下15个比特位假设把这15个比特位舍弃继续向内存申请32个比特位给d用所以还剩余2个比特位 从上过程中类型在创建的时候向内存一共申请了3232个比特位也就8字节。也能看出位段其实比结构体更加节省空间有多少用多少。 2.3 位段的内存分配 位段的成员可以是int、unsigned int、signed int或者是char类型位段的空间上是按照需要以4和字节(int)或者1个字节char的方式来开辟的位段涉及很多不确定因素位段是不跨平台的注重可移植的程序应该避免使用位段 【举个例子】 我们一起看看下面这一串代码在内存中是如何分配的 #include stdio.h struct S {char a : 3;char b : 4;char c : 5;char d : 4; };int main() {struct S s { 0 };s.a 10;s.b 12;s.c 3;s.d 4; }首先先定制一些规则 假设位段中的成员在内存中是从低位向高位分配当第二个位段成员占内存二进制位比较大时无法容纳前一个剩余位段时直接把前一个剩余的舍弃在visual studio测试 分配过程如下结构体初始化为000000000 a被赋值成10转化为二进制00001010而a只占内存3个二进制位也就是010最高位的1被截断分配00000010b被赋值成12转化为二进制00001100b占内存4个二进制位恰好能容纳上一个剩余位段。分配01100010c被赋值成3转化为二进制00000011c只占内存5个二进制位也就是00011然后这次的位段成员无法容纳上一个剩余位段我们就舍弃继续向内存申请00000000分配00000011d被赋值成4转化为二进制00000100d只占内存4个二进制位然而上一个剩余位段还是无法容纳这次的成员位段继续像内存申请00000000分配00000100所以现在内存里为0110010 00000011 00000100 转化为十六进制也就是 62 03 04我们F10调试在内存中看看 这结果恰好就是我们分析出来的结果 2.4 位段跨平台问题。 int位段被当成有符号数还是无符号数是不确定的位段中最大位的数目不能确定。16位机器最大1632位机器最大32如果int位段成员占内存27个二进制位那么在16位机器会出现问题位段中的成员咋子内存中从左向右分配还是从右向左分配标准还未确定。当一个结构包含两个位段第二个位段成员比较大无法容纳于第一个位段剩余位时是舍弃剩余的位还是利用这也是未确定的。 总结 跟结构体相比位段可以达到同样的效果但是位段可以很好的节省空间但是有跨平台的问题存在 三、枚举 3.1 枚举的概念 枚举顾名思义就是一一列举 比如在我们生活中 星期一到星期天是有限的7个可以一一列举性别男和女也可以一一列举一年有12个月也可以一一列举 3.2 枚举的定义、初始化及使用 枚举和结构体其实是非常类似的它的关键字enum 【举个例子】 //枚举星期一道星期天 enum Week {Mon,Tues,Wed,Thur,Fri,Sat,Sun }; //分号不能丢 //成员以逗号结尾int main() {enum Week w Mon;//初始化return 0; }上面定义的enum Week是枚举类型{}中的内容是枚举类型的可能取值也叫枚举常量初始化最好用枚举常量枚举常量默认是从0开始一次递增1 枚举常量在定义的时候也可以赋初值 枚举常量在初始化之后是不能被修改的 3.3 枚举的优点 增加代码的可读性和可维护性和#define定义的标识符比较枚举有类型检查更加严谨防止了命名污染封装便于调试使用方便一次可以定义多个常量 3.4 枚举的大小 枚举的大小是4个字节 四、联合 联合也是一种特殊的自定义类型其关键字是union这种类型定义的变量也包含一系列的成员特征是这些成员共用同一块空间所以联合也叫共用体 4.1 联合类型的定义及初始化 //定义一个联合类型 union UN {char c;int a; };int main() {union UN x; //初始化return 0; }4.2 联合大小计算 联合的大小至少是最大成员的大小。当最大成员大小不是最大对齐数的整数倍的时候就要对齐到最大对齐数的整数倍最小对齐数 编译器默认的一个对齐数与该成员类型大小的较小值。(VS中默认的值为8Linux环境下无对齐数) 【举个例子】 char c[5]自身大小是5对齐数成员类型大小1默认对齐数是vs环境8其最小对齐数为1int a自身大小是4对齐数成员类型大小4默认对齐数是vs环境8最小对齐数为4通过比较它们两个的最小对齐数发现4为最大对齐数而最大成员大小是55不是4的整数倍因此要浪费空间到对齐到8所以它们大小是8 4.3 联合的特点 联合的成员是共用同一块内存空间这样一个联合变量的大小至少是最大成员的大小。 【证明】 我们发现它们3个的地址都相等就是因为它们共用了同一块空间。
http://www.w-s-a.com/news/617530/

相关文章:

  • 温州专业建站网站制作的管理
  • 公司网站开发策划书有没有专门做教程的网站
  • 江苏省工程建设信息网站一天赚1000块钱的游戏
  • 制作响应式网站报价品牌建设整体体系包括什么
  • 网站推广策划报告目前做win7系统最好的网站
  • 东莞网站建设咨询公江西网站建设平台
  • 什么是网站功能源码下载站
  • 石家庄制作网站的公司双柏县住房和城乡建设局网站
  • 影视vip网站建设教程ppt模板免费下载 素材红色
  • 内蒙古城乡建设部网站首页平台网站建设ppt
  • 集约化网站建设项目官方网站建设
  • 原创先锋 北京网站建设网站开发电脑内存要多少
  • 婚恋网站建设项目创业计划书网站建设 食品
  • 免费建网站代码查询做导员的网站
  • 做网站的软件电子可以看女人不易做网站
  • 学校响应式网站模板下载仙居住房和城乡建设规划局网站
  • 推广网站的方法有拍卖网站建设
  • 网站建设网站排名优化中国网站服务器哪个好
  • asp网站应用程序网站建设需要提供的资料
  • 网站开发与设计.net微信小程序设计制作
  • 怎样做网站排名优化展馆设计费取费标准一览表
  • 网站建设去哪可接单网站建设与设计大作业
  • 休闲咖啡厅网站开发目标韩国小清新网站模板
  • 做微景观的网站制作网页模板适应不同分辨率
  • 最简单的网站系统昨天军事新闻最新消息
  • 做ps网页设计的网站有哪些wordpress内容付费
  • 有没有免费注册域名的网站科技小制作 手工 简单
  • 网站支付端口win10优化大师怎么样
  • 怎么做云购网站吗网站流量监测
  • 网站被恶意刷流量可以翻外墙的浏览器