在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。
结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
结构体作用:
结构体和其他类型基础数据类型一样,例如int类型、char类型,只不过结构体可以做成你想要的数据类型。以方便日后的使用。
在实际项目中,结构体是大量存在的。研发人员常使用结构体来封装一些属性来组成新的类型。由于C语言内部程序比较简单,研发人员通常使用结构体创造新的“属性”,其目的是简化运算。
结构体在函数中的作用不是简便,其最主要的作用就是封装。封装的好处就是可以再次利用。让使用者不必关心这个是什么,只要根据定义使用就可以了。
结构体c语言也就是C语言结构体,C语言结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的,可以认为结构体是一种聚合类型。
C语言中,结构体类型属于一种构造类型(其他的构造类型还有数组类型,联合类型)。在实际开发中可以将一组类型不同的、但是用来描述同一件事物的变量放到结构体中。
C语言结构体的特点
结构体和数组在处理多个对象的集合方面具有诸多相同点,因而它们在 C 语言中被统称为聚合类型。但两者也有明显的不同点,数组被用于高效处理“相同类型”的数据的集合,而结构体通常被用于高效处理“不同类型”的数据的集合(偶尔也会有成员类型全部相同的情况)。
1、可以通过位域来实现,如下:struct int_16
{
unsigned a : 4 //占4位的部分变量名为a
unsigned b: 12 //占12位的部分变量名为b
}
2、在c语言中定义bit型变量,可以使用位域来自定义。
位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:
struct 位域结构名
{ 位域列表 }
其中位域列表的形式为: 类型说明符 位域名:位域长度
示例:通过位域来计算IEEE754浮点数标准中,单精度浮点数的最大值、最小值以及最小弱规范数。
#include <stdio.h>
typedef struct FP_SINGLE
{
unsigned __int32 fraction : 23
unsigned __int32 exp : 8
unsigned __int32 sign : 1
} fp_single
int main()
{
float x
fp_single * fp_s = (fp_single *)&x
fp_s->sign = 0
fp_s->exp = 0xfe
fp_s->fraction = 0x7fffff
printf ("float 最大数: %le\n",(double)x)
fp_s->sign = 0
fp_s->exp = 0x1
fp_s->fraction = 0x0
printf ("float 最小数: %le\n",(double)x)
fp_s->sign = 0
fp_s->exp = 0
fp_s->fraction = 0x1
printf ("float 最小弱规范数:%le\n\n",(double)x)
return 0
}