这篇文章的好处在文末!
C语言可以说是编程界的传奇语言。 几十年过去了,依然位居前列。
本文主要讲C语言中的结构体。 该结构体是C语言的重要组成部分,也是C语言中常用的数据结构。
1、关于结构体 在C语言中,结构体()指的是一种数据结构,它是C语言中复合数据类型(数据类型)的一种类型。
结构体可以声明为变量、指针、数组等,以实现更复杂的数据结构。 结构也是元素的集合。 这些元素被称为()结构,并且这些成员可以是不同的类型。 通常通过姓名来访问成员。
该结构体的定义如下:
struct tag { member-list } variable-list;
在:
一般情况下,tag、-list、-list这三个部分至少必须出现其中的两个。
2.结构体的常规定义有不同的定义,并且用于不同的场景。 因此,在编程时,我们需要根据实际情况来定义结构体。
方法一:
定义结构 Stu。 这时结构体就相当于一个类型,比如int。 如果需要使用该结构体,方法与int相同。
struct stu
{
char aa;
short bb;
int cc;
};
struct stu stu1, stu2;
方法二:
定义结构体stu,并定义需要使用的结构体变量stu1和stu2。 如果后面需要定义结构体变量,方法同1。
struct stu
{
char aa;
short bb;
int cc;
}stu1, stu2;
struct stu stu3;
方法三:
定义结构体时,默认结构体名称,同时定义结构体变量stu1和stu2。 但是,结构变量不能在以后定义。
struct
{
char aa;
short bb;
int cc;
}stu1, stu2;
暗示:
不能像上面那样在这里定义结构变量:(错误如下)
struct stu3;
struct stu stu3;
3、简单说一下定义结构的使用。
在 C 和 C++ 编程语言中, 是一个关键字。 它用于为数据类型提供别名,以使源代码更易于阅读和理解。 它通常用于简化声明由复杂类型组成的结构,但也经常出现在各种长度的整数数据类型中,例如 和 。
维基百科
方法四:
在使用定义结构体时,给stu结构体起一个别名STU。 后续定义不需要使用stu,直接使用STU即可。
typedef struct stu
{
char aa;
short bb;
int cc;
}STU;
STU stu1;
你会发现STU其实是通过关键字替换成了stu。
当然,也可以这样使用:
struct stu stu1;
上面的定义就失去了意义,所以不推荐。
方法五:
使用定义的结构体时,省略该结构体的第一个别名stu,直接在末尾添加STU。 使用方法同上。
typedef struct
{
char aa;
short bb;
int cc;
}STU;
STU stu1;
方法六:
还有一种符合语法规则但意义不大的定义。
typedef struct stu
{
char aa;
short bb;
int cc;
};
struct stu stu1;
上述定义被视为语法知识。 如果你还是不明白,请再看一遍。
4.结构尺寸计算
相信很多人不了解结构的尺寸。 实际编程中很多地方也用到了它。 例如,在存储和复制结构体时,就会涉及到结构体的大小。
1. 比较两种结构的尺寸。 它们是一样的吗?
结构1:
struct stu
{
char aa;
short bb;
char cc;
}stu1;
结构2:
struct stu
{
char aa;
char bb;
short cc;
}stu2;
答案是不同的。 程序测试显示(stu1)=6,(stu2)=4。
2、分析差异的原因
结构计算必须遵循字节对齐原则,一般满足三个标准:
1)结构体变量的首地址可以被其最宽的基本类型成员的大小整除;
2)结构体每个成员相对于结构体首地址的()是成员大小的整数倍。 如果有必要,编译器会在成员之间添加填充字节;
3)结构总尺寸为结构最宽基本型构件尺寸的整数倍。 如果有必要,编译器会在最后一个成员之后添加填充字节;
对于上述结构体stu1,最大字节为:2字节,顺序为char->short->char: