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

企业网站源码带后台管理新人学会seo

企业网站源码带后台管理,新人学会seo,平面设计师必备网站,初创业公司做网站Hello好久不见,今天分享的是接上次结构体没有分享完的内容,这次我们讲讲位段 枚举和联合体的概念以及他们的用法。 2.1 什么是位段 位段的声明和结构是类似的,有两个不同: 1.位段的成员必须是 int、unsigned int 或signed int 。 …

在这里插入图片描述

Hello好久不见,今天分享的是接上次结构体没有分享完的内容,这次我们讲讲位段 枚举和联合体的概念以及他们的用法。

2.1 什么是位段
位段的声明和结构是类似的,有两个不同:
1.位段的成员必须是 int、unsigned int 或signed int 。
2.位段的成员名后边有一个冒号和一个数字。

总的来说,位段和结构体很相似,但是不同的地方就是它表示的大小是位,大小是比特位,不是字节,这样的作用就是减少内存大小,还有就是增加效率。

那接下来让我们来看一个位端吧

struct A
{int _a:2;int _b:5;int _c:10;int _d:30;
};

这就是我们位段的基本样子,一个冒号加数字,数字表示的就是大小,单位是比特位。
我们也可以将它放入函数中来看一下它的大小。
我们可以将它们放入我们函数当中,用sizeof来测试,看下面的代码

#include<stdio.h>
struct A
{int _a : 2;int _b : 5;int _c : 10;int _d : 30;
};
int main()
{printf("%zd ", sizeof(struct A));return 0;
}

我们可以看到上代码在我们控制台上的结果是8
在这里插入图片描述
位段的内存分配

  1. 位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型
  2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的。
  3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。
//一个例子
#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;return  0;
}
//空间是如何开辟的?

我们来看上面的一个例子,来了解它在VS上是怎么开辟空间的

因为Vs是小端,我们从低地址开始往后动,在假设我们先用数据的低位开始往后动。
在这里插入图片描述
我们这是根据它的大小进行猜,因为它所占的字节大小就是三个字节,所以我们进行猜设它是从数据的低位开始,而且我们不是每个字节都要用到,当一个字节中不能存储我们后面比特位大小的时候我们跳到后面的字节开始使用,我们可以在VS中用内存来查看我们的结果

在这里插入图片描述
转换到16进制是620304这个数字,我们现在来看一下在内存的存储吧

在这里插入图片描述

我们可以看到的结果是和我们编译器上是一样的,但是还是会有问题,那就是位段时不能跨平台的,第一是因为它有很多不确定性,比如我们不知道它对数据的使用是怎么使用的,是从小到大还是从左到右,这都是不确定的,所以它有很多的不确定性

2.3 位段的跨平台问题

  1. int 位段被当成有符号数还是无符号数是不确定的。
  2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机器会出问题。
  3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。
  4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是
    舍弃剩余的位还是利用,这是不确定的。

总结:
跟结构相比,位段可以达到同样的效果,但是可以很好的节省空间,但是有跨平台的问题存在。
在这里插入图片描述
这就是我们位段的使用场景,相当于是包装数据,比如我们微信发消息的时候要表白一位女生,首先我们要确定这位女生的用户名,这就相当于我们图中的IP地址,如果没有这个Ip地址,我们就可能不知道发给谁,可能就发给自己的好兄弟,那这样可要产生大误会了,而我们的数据也不是直接发过去的,要进行我们最后的包装才可以,我们进行包装的时候,如果用的不是位段的话,上面的版本好每个都需要一个整型大小,那这样不是浪费,我们所占的空间越大,运行速度就越慢,我们发数据是通过网络协议栈的,这就是相当于我们的高速公路如果用int包装的话,那就是相当于大卡车,但是如果是用位段进行包装的话,那就是相当于小汽车,通行速度也就快了。

3. 枚举

枚举顾名思义就是一一列举。
把可能的取值一一列举。
比如我们现实生活中:
一周的星期一到星期日是有限的7天,可以一一列举。

性别有:男、女、保密,也可以一一列举。
月份有12个月,也可以一一列举
这里就可以使用枚举了。

那我们来使用一下枚举吧(枚举关键字是enum)
在这里插入图片描述
我们可以看到其实枚举就是整型常量,说到常量大家还记得有多少,一个是字面常量,还有就是const修饰的长常变量,还有就是枚举常量了
3.2 枚举的优点
为什么使用枚举?
我们可以使用 #define 定义常量,为什么非要使用枚举?
枚举的优点:

  1. 增加代码的可读性和可维护性
  2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
  3. 防止了命名污染(封装)
  4. 便于调试
  5. 使用方便,一次可以定义多个常量

这里在讲一下我们经常哟美好的define,我们也可以讲上面的三元素写成

#define GREEN 0
#define RED 0
#define BLUE 0

但是为什么枚举方便调试呢,这里是有原因的 当我们define的时候,我们调试就直接替换掉了,所以会不方便调试,枚举你叫方便调试,还有就是方便,比如我们要枚举一个周,那我们直接写就行了,但是如果我们define,要写七次,看起来就有点麻烦,所以不建议这样写。

enum Color//颜色
{RED=1,GREEN=2,BLUE=4
};
enum Color clr = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。
clr = 5;               //

我们在C语言中可以这样写,但是在语法检查严格的C++就不能这样写了
4. 联合(共用体)

  • 4.1 联合类型的定义

联合也是一种特殊的自定义类型
这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。

4.2 联合的特点
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。

#include<stdio.h>
//联合类型的声明
union Un
{char c;int i;
};int main()
{//联合变量的定义union Un un;//计算连个变量的大小printf("%d\n", sizeof(un));return 0;
}

通过运行发现我们的结果是4个字节大小那说明我们char其实和我们的int公用一个个字节。
4.2 联合的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)

union Un
{int i;char c;
};
union Un un;
// 下面输出的结果是一样的吗?
printf("%d\n", &(un.i));
printf("%d\n", &(un.c));
//下面输出的结果是什么?
un.i = 0x11223344;
un.c = 0x55;
printf("%x\n", un.i);

可以看到的是其实他们的地址是一样的,这里更加说明了联合体是共用同一块空间的

那我们还记不记得之前我们来测试机器大小端是怎样计算的呢,相信有一部分人记得,另一部分又忘记了,那在写一次吧

#include<stdio.h>
int check_sys()
{int a = 1;return *((char*)&a);
}
int main()
{int ret = check_sys();if (ret == 1){printf("小端\n");}else{printf("大端\n");}return 0;
}

那现在我们也可以用联合体来进行测试

#include<stdio.h>
int check_sys()
{union{char c;int i;}u;u.i = 1;return u.c;
}
int main()
{int ret = check_sys();if (ret == 1){printf("小端\n");}else{printf("大端\n");}return 0;
}

联合体使用范围就是有点小,特殊情况才使用我们来看一下下面这张图

在这里插入图片描述
这里我们看图,发现每次都需要重新定义一个结构体,这样浪费空间就很大,那我们就可以这样写

在这里插入图片描述
这样写就能节省很多空间了,那今天的内容就分享到这里,我们下次再见

http://www.qdjiajiao.com/news/3711.html

相关文章:

  • 怎么学做网站关键词优化排名软件推荐
  • 做英语阅读的网站接单平台
  • 做web网站前端企业网站设计的基本内容包括哪些
  • 服装行业做推广网站做营销策划的公司
  • 深圳建网站的网络公司竞价推广培训课程
  • 长沙网站建设商城企业网络
  • 国内外政府门户网站建设特点宁波seo公司推荐
  • 泉州网站制作报价seo基础培训机构
  • 免费企业建站系统源码湘潭seo快速排名
  • 哪个网站可以自己做名片太原网站推广公司
  • javaweb网站首页怎么做公司企业网站模板
  • 温州手机网站推广南宁seo推广优化
  • 可免费商用的cms建站系统厦门百度推广怎么做
  • 织梦做网站的详情百度号码认证申诉平台
  • 产品营销类网站上海seo
  • 海口百度seo朝阳区seo
  • 装饰网站模板下载公司搭建网站
  • 郑州市做网站的公网站营销网
  • 有经验的邯郸网站建设体验营销策划方案
  • 安徽省建设干部学校网站关停百度推广官方投诉电话
  • 网站建设电话销售话术技巧郑州网站优化哪家好
  • 如何提升网站的转化率免费建站建站abc网站
  • 中国糕点网页设计网站软件开发工程师
  • 滦南网站建设推广百度搜索风云榜人物
  • 提供网站制作谷歌关键词搜索排名
  • 各大网站黑白几天成都百度推广开户公司
  • 稳定免费空间网站推广及seo方案
  • 网站分析报告哈尔滨网络推广优化
  • 以做网站为毕设揭阳百度快照优化排名
  • 网站名字大全有哪些南京最大网站建设公司