1.软文推荐

2.软文推荐

3.软文推荐

结构体是类似于名片形式的数据集合体,可以把它理解为一种由用户自定义的特殊的复合型的“数据类型”,在这个复合型的“数据类型”中可以包含多种基本数据类型,我们可以把它作为一个整体来操作。

一、关于结构体

在C语言中,结构体(struct)指的是一种数据结构,是C语言中复合数据类型(aggregate data type)的一类。

结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

结构体的定义如下所示:

struct tag { member-list } variable-list;

其中:

struct为结构体关键字; tag为结构体的标志; member-list为结构体成员列表,其必须列出其所有成员; variable-list为此结构体声明的变量。 在一般情况下:tag、member-list、variable-list这3部分至少要出现2个。

二、结构体常规定义

不同的定义,应用在不同场景,所以,我们编程时需要结合实际情况来定义结构体。

方法1:

定义结构体stu,此时结构体相当于一个类型,比如int,如需使用此结构体,方法同int.

struct stu
{
char aa;
short bb;
int cc;
};

struct stu stu1, stu2;
方法2:

定义结构体stu同时定义需要使用的结构体变量stu1, stu2。如后面再需要定义结构体变量,方法同1.

struct stu
{
char aa;
short bb;
int cc;
}stu1, stu2;

struct stu stu3;
方法3:

定义结构体时,结构体名称缺省,同时定义结构体变量stu1,stu2。但后面不可再定义结构体变量。

struct
{
char aa;
short bb;
int cc;
}stu1, stu2;
提示:

这里不能像上面再定义结构体变量:(以下错误)

struct stu3;
struct stu stu3;
三、使用typedef定义结构体

这里先简单说下typedef。

在C和C++编程语言中,typedef是一个关键字。它用来对一个数据类型取一个别名,目的是为了使源代码更易于阅读和理解。它通常用于简化声明复杂的类型组成的结构 ,但它也常常在各种长度的整数数据类型中看到,例如size_t和time_t。 维基百科

方法4:

使用typedef定义结构体同时,给stu结构体别名STU,后续定义可不用使用struct stu,直接使用STU即可。

typedef struct stu
{
char aa;
short bb;
int cc;
}STU;

STU stu1;

你会发现,其实就是通过关键字typedef,将STU取代了struct stu。

当然,也可以这么用:

struct stu stu1;

上面这种定义就失去了typedef的意思,所以不推荐。

方法5:

使用typedef定义结构体时,省掉结构体第一个别名stu,直接在后面加STU,使用方法同上。

typedef struct
{
char aa;
short bb;
int cc;
}STU;

STU stu1;
方法6:

还有一种符合语法规则,但意义不大的定义方式。

typedef struct stu
{
char aa;
short bb;
int cc;
};

struct stu stu1;

以上这些定义方式算是语法的知识,如果还不懂,请再次复习一下。

四、结构体大小计算

结构体的大小,我相信很多人都没搞明白。实际编程中也是很多地方都在应用,比如:存储、拷贝结构体时都会牵涉到结构体大小的问题。

1. 对比两结构体大小,一样吗?

结构体1:

struct stu
{
char aa;
short bb;
char cc;
}stu1;
结构体2:

struct stu
{
char aa;
char bb;
short cc;
}stu2;

答案是不一样。程序测试得出sizeof(stu1)=6, sizeof(stu2)=4.

2. 分析不一样原因

结构体计算要遵循字节对齐原则,一般满足三个准则:

结构体变量的首地址能够被其最宽基本类型成员的大小所整除; 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节; 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节; 对于上面结构体stu1来说,最大字节:2字节,顺序是 char->short->char:

对于上面结构体stu2来说,最大字节:2字节,顺序是 char->char->short:

通过上面两个表格,相信你应该明白了,改成4字节的int,原理一样。

最后,强调一下,学习编程,不能只看书,要多敲代码。

本文来源:www.lxlinux.net/8343.html,若引用不当,请联系修改。

相关文章 8

1

RackNerd:近期促销便宜VPS方案整理,多机房可选 39秒前

RackNerd,2019年末成立的商家,主要提供各类便宜KVM VPS、独立服务器、虚拟主机、分销主机等,国外主机测评介绍过多次,本文整理了一些最...

2

国外vps云服务器选择哪款好?亲身经验分享教你学会选择(国外服务器vps有哪些?) 3分钟前

国外vps云服务器选择哪款好? 国外vps有很多,但是哪一款才比较适合我们国内大陆用户呢?这里我们就展开讲解国外VPS的选择,对于新老用...

3

天翼云“云领智企”活动:爆款云服务器低至86元/年(天翼云官网) 5分钟前

天翼云近日专门推出了云领智企 助力百万企业转型腾飞活动,助力企业破茧转型,业务腾飞。天翼云“云领智企”覆盖企业上云5大通用场景...

4

广西桂林域名快速建站的网站公司(桂林本地网站) 7分钟前

广州合优网络科技有限公司 让您的网站走在互联网的前端!以最佳的用户体验,让客户随时随地找到您!所谓响应式网页建设,是指可以自...

5

CentOS系统启动流程简单介绍 9分钟前

CentOS开机大家肯定都看过吧,本片文章和大家分享一下CentOS系统启动流程。 1. CentOS5 POST开机自检 运行CMOS中的BIOS程序,加载第一个启动磁盘...

6

【便宜】CloudCone:1核/1G/20G SSD/3T/1Gbps/洛杉矶MC/年付$16.16,多款便宜套餐 10分钟前

CloudCone家的优惠套餐是一波接着一波,一周前商家放出了一些特价套餐,今天商家又放出了闪购套餐,本次商家仅放出了三款,并且特别说...

7

Control Web Panel(CWP)服务器控制面板介绍 11分钟前

Control Web Panel(CWP)是一个人工智能驱动的免费和专业的Linux服务器控制面板,常用于管理专用服务器和VPS等。例如,我们租用免备案的美国...

8

阿帕云引擎(原ZKEYS)平台主控迁移换服务器流程教程 13分钟前

阿帕云引擎(原zkeys),阿帕云引擎是企业级云管理操作系统,主要面向的是智能数据中心,通过提供的api标准来管理包括计算,存储和网络在...