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

网站未备案怎么做淘宝客广州seo托管

网站未备案怎么做淘宝客,广州seo托管,龙岗建设网站,中文网站建设翻译成英文是什么意思个人主页点这里~ 结构体 一、结构体类型的声明1、结构的声明2、结构体变量的创建和初始化3、声明时的特殊情况4、自引用 二、结构体内存对齐1、对齐规则2、存在内存对齐的原因3、修改默认对齐数 三、结构体传参四、结构体实现位段 一、结构体类型的声明 我们在指针终篇中提到过…

在这里插入图片描述

个人主页点这里~


结构体

  • 一、结构体类型的声明
    • 1、结构的声明
    • 2、结构体变量的创建和初始化
    • 3、声明时的特殊情况
    • 4、自引用
  • 二、结构体内存对齐
    • 1、对齐规则
    • 2、存在内存对齐的原因
    • 3、修改默认对齐数
  • 三、结构体传参
  • 四、结构体实现位段

一、结构体类型的声明

我们在指针终篇中提到过结构体的这一部分内容(详情请阅拙作终の指针)现在我们来整个展开叙述一下

1、结构的声明

struct tag
{member-list;
}variable-list;

花括号 { } 中放的是成员变量,结构的每个成员变量都可以是不同的类型,每一个被定义的结构体中都要有至少一个成员变量,结构是一些值的集合。
定义一个人

struct man
{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//身份证号
};

2、结构体变量的创建和初始化

#include <stdio.h>
struct Stu
{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//身份证号int main(){struct Stu s = { "张三", 18, "男", "111111200602023215" };//结构体顺序初始化struct Stu s2 = { .age = 19, .name = "lisi", .id = "111111200502023222", .sex = "⼥" };//指定顺序初始化return 0;
};

3、声明时的特殊情况

匿名结构体类型,如果没有对结构体进行重命名的话,仅能使用一次

struct
{int a;char b;float c;
}x;

形如上面代码的结构体未重命名的话,使用这一次便被回收

4、自引用

自引用的正确方法:

struct Node
{int data;struct Node* next;
};

通过结构体指针的形式来进行自引用
并且结构体自引用是不能用typedef重命名的
像这个:

typedef struct
{int a;Node* next;
}Node;

我们会在创建Node结构体之前在结构体当中使用Node,所以不可取

二、结构体内存对齐

结构体内存对齐是计算结构体大小的一个必备条件

1、对齐规则

①结构体的第一个成员对齐到结构体变量起始位置的地址
②其他成员变量要对齐到对齐数的整数倍的地址处
对齐数:编译器默认的对齐数与该成员变量大小的较小值(我所使用的vs2022默认对齐数为8)
③结构体总大小一定为对齐数的整数倍
④如果结构体中嵌套了结构体,嵌套的结构体对齐到对齐到自己成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数的整数倍
我们可以将大小看作一个数组,每一个位置都是一个字节

struct S1
{char c1;//1字节,<8,就将1字节放在0位置处int i;//4字节,<8,因为1,2,3位置不是4的整数倍,所以我们直接找到4位置,将4个字节放入char c2;//1字节,<8,放在8位置处
};

又因为现在指向9位置处,9不是最大对齐数4的整数倍,所以要指向12处,所以结构体S1的大小为12字节
printf打印一下:
在这里插入图片描述

struct S2
{char c1;//1字节,放到0位置char c2;//1字节,放到1位置int i;//4字节,2不是4的整数倍,放到4位置
};

最终指向8位置,是4的整数倍,故S2的大小为8字节
在这里插入图片描述

struct S3
{double d;//8字节,放到0位置处char c;//1字节,放到8位置处int i;//4字节,9不是4的整数倍,放到12位置处,最终指向16
};

因为最大对齐数为8,16为8的整数倍,所以结构体S3的大小就是16个字节

struct S4
{char c1;//1字节,放到0位置处struct S3 s3;//16字节,以8为对齐数,放到8位置,最后指向24位置处double d;//8字节,放到24位置,最终指向32位置
};

32是最大对齐数8的整数倍,所以结构体S4的大小就是32个字节

2、存在内存对齐的原因

在数据访问时,对齐的内存只需要一次访问,而不对齐的内存需要两次访问
结构体的内存对齐是拿空间来换取时间
我们可以将占用内存小的尽量集中在一起来节省空间

struct S1
{char c1;int i;char c2;
};
struct S2
{char c1;char c2;int i;
};

3、修改默认对齐数

#pragma
#include <stdio.h>
#pragma pack(1)//设置默认对⻬数为1
struct S
{char c1;//1字节,存到0位置int i;//4字节,默认对齐数为1小于4,存到1位置char c2;//1字节,存到5位置,指向6
};
#pragma pack()//取消设置的对⻬数,还原为默认
int main()
{printf("%d\n", sizeof(struct S));return 0;
}

在这里插入图片描述

三、结构体传参

struct S
{int data[100];int num;
};
struct S s = { {1,2,3,4}, 1000 };
void print(struct S* ps)
{printf("%d\n", ps->num);
}
int main()
{print(&s);return 0;
}

结构体传参的时候最好传一个地址,因为直接传一个结构体过去的话会造成时间和空间上不必要的开销,导致性能下降

四、结构体实现位段

位段的成员可以是int , unsigned int , signed int ,char类型的
位段不跨平台,可移植程序应该避免使用位段

struct S
{char a : 3;char b : 4;char c : 5;char d : 4;
};
struct S s = { 0 };
int main()
{s.a = 10;s.b = 12;s.c = 3;s.d = 4;printf("%d\n", s.a);printf("%d\n", s.b);printf("%d\n", s.c);printf("%d\n", s.d);}

在这里插入图片描述
在这里插入图片描述

这里的a存入了10,由于位段作用,被存入a的二进制数为010,用整数形式打印,第一位为0,为正数,以第一位补位到32位,即00000000 00000000 00000000 00000010,即为2

这里的b存入了12,由于位段作用,被存入b的二进制数为1100,用整数形式打印,第一位为1,为负数,补1到11111111 11111111 11111111 11111100,这是补码,然后取反加一为原码,即10000000 00000000 00000000 00000100,即为-4

这里的c存入了3,由于位段作用,被存入c的二进制数为00011,用整数形式打印,第一位为0,为正数,以第一位补位到32位,即00000000 00000000 00000000 00000011,即为3

这里的d存入了4,由于位段作用,被存入a的二进制数为0100,用整数形式打印,第一位为0,为正数,以第一位补位到32位,即00000000 00000000 00000000 00000100,即为4

但是它空间的开辟是这样的:
在这里插入图片描述
第一个数据:二进制的01100010,十六进制的0x62
第二个数据:二进制的00000011,十六进制的0x03
第三个数据:二进制的00000100,十六进制的0x04

在这里插入图片描述
可以看到我们的结构体中存放的数据是62 03 04 00,与上述分析相符

跟结构体相比,位段可以达到同样的效果,并且可以很好的节省空间,缺点是有跨平台的问题存在

因为地址的分配是以字节为单位的,位段下的某些数据是没有地址的,所以位段数据不能用指针来访问


今天的分享就到这了~
在这里插入图片描述

http://www.15wanjia.com/news/25787.html

相关文章:

  • 装修设计公司logo东莞seo建站公司哪家好
  • 专门做孩子早教的网站东莞seo网络公司
  • 做代金券的网站让顾客心动的句子
  • 河北网站制作报价腾讯广告推广平台
  • 重庆市建设工程管理协会网站网域名查询地址
  • 昆明模板建站定制网站seo网络营销推广
  • 必应网站建设做公司网站需要多少钱
  • 常德网站公司全网营销整合推广
  • 广州网站开发哪家强线上推广具体应该怎么做
  • 中国建设银行人力资源网站百度经验官网登录
  • 怎么做网站关键词数据分析方法
  • 做网页是什么专业江苏网站seo
  • 数商云电子商务网站建设上海空气中检测出病毒
  • 门户网站建设分工的通知河南网站推广公司
  • 政府网站建设发展规划公司网站搭建流程
  • 两学一做 网站网页设计可以自学吗
  • 有哪个网站可以做兼职兰州seo
  • 建设电影网站赚钱10条重大新闻事件
  • 员工做违法网站佛山百度seo代理
  • seo快速整站上排名教程百度推广优化方案
  • 邯郸公司网站建设app拉新佣金排行榜
  • 做网站技术方法有今日军事新闻头条新闻
  • 电子商务网站建设课程设计百度快照提交入口
  • 佛山微网站建设哪家专业上海优化公司排行榜
  • 网站开发学校 优帮云网站移动端优化工具
  • 全屏幕网站模板营销网络的建设有哪些
  • wordpress快速建站全网营销代运营
  • 湘潭房产网站建设免费招收手游代理
  • 个人做电商怎么入门福州seo按天付费
  • pos机做网站推广全国人大常委会委员长