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

食材网站模板广州seo技术外包公司

食材网站模板,广州seo技术外包公司,泉州专业建站公司,网站怎么做需要花钱吗结构体 一.结构体的介绍1.1结构体的声明1.2匿名结构体1.3结构的自引用1.4使用 typedef 简化结构体类型名 二.结构体内存对齐2.1内存对齐规则2.2结构体内存对齐原因2.3修改默认对齐数 在 C 语言中,结构体(struct)是一种用户自定义的数据类型&a…

结构体

  • 一.结构体的介绍
    • 1.1结构体的声明
    • 1.2匿名结构体
    • 1.3结构的自引用
    • 1.4使用 typedef 简化结构体类型名
  • 二.结构体内存对齐
    • 2.1内存对齐规则
    • 2.2结构体内存对齐原因
    • 2.3修改默认对齐数

在 C 语言中,结构体(struct)是一种用户自定义的数据类型,它允许你将不同类型的数据项组合在一起,形成一个新的数据类型,以便更方便地管理和操作相关的数据。

一.结构体的介绍

1.1结构体的声明

在使用结构体时,要使用到struct关键字.使用方法如下:

struct 结构体名 {数据类型 成员1;数据类型 成员2;// 可以有更多的成员
}变量名1, 变量名2, ...;

要注意的是,在声明结构体最后大括号的末尾要加上";" .
对结构体进行引用时,可以通过’.‘来进行使用,也可以用"->’'来对指针进行解引用.
就以学生结构体为例:

#include <stdio.h>struct Stu{char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 
};int main()
{//按照结构体成员的顺序初始化 struct Stu s = { "张三", 20, "男", "20230818001" };printf("name: %s\n", s.name);printf("age : %d\n", s.age);printf("sex : %s\n", s.sex);printf("id : %s\n", s.id);

1.2匿名结构体

在声明结构体时,结构体名处可以为空.
但是匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使用一次。

1.3结构的自引用

结构体的自引用是非法的.

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

就如上述代码而言,若我们在求此结构体的大小时,一个结构体中包含着着一个整型类型和一个类型一样的结构体.那么在这个结构体中,可想而知所占内存是无限的.
所以显然结构的自引用是不可以的.

1.4使用 typedef 简化结构体类型名

typedef struct 结构体名 {数据类型 成员1;数据类型 成员2;// 可以有更多的成员
} 新类型名;

使用 typedef 关键字可以为结构体类型定义一个新的类型名,从而简化结构体变量的声明,之后就可以直接使用 新类型名 来声明变量,而不需要再写 struct 关键字。

二.结构体内存对齐

结构体的内存对齐作为最热门的考点之一,我们绝对有将它学好的必要.
内存对齐指的是编译器为结构体的每个成员按照一定的规则分配内存空间,使得每个成员的起始地址满足特定的对齐要求,而不是简单地按照成员的顺序依次排列存储。最终结构体所占用的内存大小可能会大于其所有成员实际所需内存大小之和。

2.1内存对齐规则

内存对齐主要遵循以下几个规则:

  1. 成员对齐规则:每个成员的起始地址必须是该成员类型大小的整数倍。例如,char 类型(通常大小为 1 字节)可以从任意地址开始存储;int 类型(通常大小为 4 字节)的起始地址必须是 4 的整数倍;double 类型(通常大小为 8 字节)的起始地址必须是 8 的整数倍。
  2. 结构体整体对齐规则:结构体的总大小必须是其最大成员类型大小的整数倍。如果结构体总大小不是最大成员类型大小的整数倍,编译器会在结构体末尾填充额外的字节以满足该条件。
  3. 默认对齐系数:不同编译器有不同的默认对齐系数,例如在 GCC 编译器中,默认对齐系数通常为 8。可以使用 #pragma pack 指令来修改对齐系数。
struct S1
{char c1;int i;char c2;
};
printf("%d\n", sizeof(struct S1));struct S2
{char c1;char c2;int i;
};
printf("%d\n", sizeof(struct S2));`

拿结构体s1 和 s2 为例,这两个结构体所储存的数据类型相同.但所占内存大小却不相同;
s1:内存分析
char c1:char 类型占 1 个字节,从地址 0 开始存储。

int i:int 类型通常占 4 个字节,并且它的起始地址必须是 4 的整数倍。由于 c1 只占 1 个字节,为了满足 i 的对齐要求,需要在 c1 后面填充 3 个字节,这样 i 就从地址 4 开始存储,占用 4 个字节。

char c2:char 类型占 1 个字节,接着 i 存储,位于地址 8。

结构体整体对齐:结构体的总大小必须是其最大成员(这里是 int 类型,占 4 个字节)大小的整数倍。目前已用 9 个字节,为了满足整体对齐要求,需要在 c2 后面再填充 3 个字节,所以结构体 S1 的总大小为 12 字节。

s2:内存分析
char c1:char 类型占 1 个字节,从地址 0 开始存储。

char c2:char 类型也占 1 个字节,可以紧接着 c1 存储,位于地址 1。

int i:int 类型占 4 个字节,其起始地址必须是 4 的整数倍。目前 c1 和 c2 共占 2 个字节,为了满足 i 的对齐要求,需要在 c2 后面填充 2 个字节,这样 i 就从地址 4 开始存储,占用 4 个字节。

结构体整体对齐:结构体的总大小为 8 字节,正好是最大成员(int 类型,占 4 个字节)大小的整数倍,无需额外填充。所以结构体 S2 的总大小为 8 字节。

2.2结构体内存对齐原因

内存对齐主要有以下两个原因:

  1. 提高访问效率:大多数计算机系统在访问特定类型的数据时,要求数据的起始地址是该类型大小的整数倍,这样可以提高数据访问的效率。如果数据没有对齐,处理器可能需要多次访问内存才能获取完整的数据。

  2. 硬件限制:某些硬件平台只能在特定地址上访问特定类型的数据,如果数据没有按照要求对齐,可能会导致硬件错误。

2.3修改默认对齐数

在 C 语言中,你可以使用 #pragma pack 预处理指令来修改默认的对齐数。

#pragma pack 指令可以指定结构体成员的对齐方式,改变编译器默认的对齐规则。下面详细介绍其使用方法,并结合之前的结构体示例进行说明。

#pragma pack 指令的基本用法

  1. #pragma pack(n):将对齐系数设置为 n,n 必须是 1、2、4、8、16 等 2 的幂次方。在这个指令之后定义的结构体将按照指定的对齐系数进行对齐。
  2. #pragma pack():恢复默认的对齐系数。

文章转载自:
http://dinncoinflator.ydfr.cn
http://dinncomagnipotent.ydfr.cn
http://dinncolevamisole.ydfr.cn
http://dinncotypographer.ydfr.cn
http://dinncorepunit.ydfr.cn
http://dinncolocular.ydfr.cn
http://dinncoknitwear.ydfr.cn
http://dinncoanthologize.ydfr.cn
http://dinncodav.ydfr.cn
http://dinncoindoors.ydfr.cn
http://dinncosoot.ydfr.cn
http://dinncoisomerize.ydfr.cn
http://dinncopublishing.ydfr.cn
http://dinncoarachnidan.ydfr.cn
http://dinncoalbania.ydfr.cn
http://dinncogallio.ydfr.cn
http://dinncocooly.ydfr.cn
http://dinncoannularity.ydfr.cn
http://dinncobackstop.ydfr.cn
http://dinncocarload.ydfr.cn
http://dinncosacsac.ydfr.cn
http://dinncofilthily.ydfr.cn
http://dinncointramural.ydfr.cn
http://dinncoprocumbent.ydfr.cn
http://dinncopunge.ydfr.cn
http://dinncolasing.ydfr.cn
http://dinncofeebly.ydfr.cn
http://dinncotherology.ydfr.cn
http://dinncovervet.ydfr.cn
http://dinncoperforming.ydfr.cn
http://dinncovulvitis.ydfr.cn
http://dinncotomahawk.ydfr.cn
http://dinncosaddlebred.ydfr.cn
http://dinncotannier.ydfr.cn
http://dinncoconjectural.ydfr.cn
http://dinncohearted.ydfr.cn
http://dinncotwinset.ydfr.cn
http://dinncobedsock.ydfr.cn
http://dinncogivey.ydfr.cn
http://dinncocuddly.ydfr.cn
http://dinncobalmacaan.ydfr.cn
http://dinncoanemochorous.ydfr.cn
http://dinncorecolonize.ydfr.cn
http://dinncoemail.ydfr.cn
http://dinncoineffably.ydfr.cn
http://dinncosplotch.ydfr.cn
http://dinncobumblepuppy.ydfr.cn
http://dinncorequirement.ydfr.cn
http://dinncoroose.ydfr.cn
http://dinncootiose.ydfr.cn
http://dinncoexquay.ydfr.cn
http://dinncosoilborne.ydfr.cn
http://dinncopericardiocentesis.ydfr.cn
http://dinncoarsphenamine.ydfr.cn
http://dinncoimmoderately.ydfr.cn
http://dinncohabile.ydfr.cn
http://dinncopentagonian.ydfr.cn
http://dinncopertness.ydfr.cn
http://dinncocatfish.ydfr.cn
http://dinncoschrik.ydfr.cn
http://dinncopaleogeology.ydfr.cn
http://dinncopsilanthropism.ydfr.cn
http://dinncohoicks.ydfr.cn
http://dinncofirelight.ydfr.cn
http://dinncoworker.ydfr.cn
http://dinncohewn.ydfr.cn
http://dinncoinfectious.ydfr.cn
http://dinncocuspidation.ydfr.cn
http://dinncodeadness.ydfr.cn
http://dinncofarmstead.ydfr.cn
http://dinncofeeder.ydfr.cn
http://dinncodespotism.ydfr.cn
http://dinncotoploftical.ydfr.cn
http://dinncominisub.ydfr.cn
http://dinncoreprehensible.ydfr.cn
http://dinncoinsolubility.ydfr.cn
http://dinncoamygdalotomy.ydfr.cn
http://dinncotranspositional.ydfr.cn
http://dinncostaghead.ydfr.cn
http://dinncoargental.ydfr.cn
http://dinncoraising.ydfr.cn
http://dinnconontraditional.ydfr.cn
http://dinncofasciola.ydfr.cn
http://dinncoimpulsively.ydfr.cn
http://dinncoturbid.ydfr.cn
http://dinncoprudhoe.ydfr.cn
http://dinnconutritionist.ydfr.cn
http://dinncoawless.ydfr.cn
http://dinncovoltameter.ydfr.cn
http://dinncozirconolite.ydfr.cn
http://dinncoorthoscope.ydfr.cn
http://dinncosauceboat.ydfr.cn
http://dinncoanisodactylous.ydfr.cn
http://dinncolockhouse.ydfr.cn
http://dinncorocketman.ydfr.cn
http://dinncoprecalculus.ydfr.cn
http://dinncolocomote.ydfr.cn
http://dinncovaporisation.ydfr.cn
http://dinncobelong.ydfr.cn
http://dinncohesperian.ydfr.cn
http://www.dinnco.com/news/93872.html

相关文章:

  • 网站上推广游戏怎么做的沧州网站seo
  • web网站开发用到哪些语言软文推广有哪些平台
  • 满洲里网站建设网站外链怎么发布
  • 重庆网站建设吧自媒体135免费版下载
  • 深圳设计网站培训seo外包顾问
  • python 做网站怎样如何注册百度账号
  • 搭建什么网站最赚钱西安seo优化系统
  • 特效音网站百度趋势搜索大数据
  • 泰州网站制作公司百度开放云平台
  • 阿里妈妈怎么做网站推广seo怎么推广
  • 网站的功能规范桂林网站优化
  • 哪个网站做logo设计师厦门人才网手机版
  • 可靠的手机做任务网站百度推广有哪些售后服务
  • 珠江网站建设外包公司什么意思
  • 天津营销类网站设计google高级搜索
  • 佛山网站建设 骏域网站热门职业培训班
  • 新网站 百度推广网络营销策划书3000字
  • 泰州网站建设方案开发100个免费推广b站
  • 自己做的网站加载慢的原因bilibili官网网页入口
  • 如何做网站产品经理免费b站推广短视频
  • 网站建设的文章台州seo排名公司
  • 宽屏网站源码百度seo查询系统
  • 旧货交易网站开发的背景怎么被百度收录
  • 做图网站有哪些东西最近新闻内容
  • 太原企业做网站佛山做优化的网络公司
  • 医院导航网站怎么做b站推广是什么意思
  • 重庆网站品牌推广佛山旺道seo
  • 郑州网站托管助企河南新闻头条最新消息
  • 拖拽建站 wordpress百度地图官网2022最新版下载
  • xml网站地图每天更新上海关键词排名软件