加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 1. 结构体定义的三种形式
    • 2. 结构体与共同体的区别
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

结构体定义的三种形式 结构体与共同体的区别

2023/06/12
3179
阅读需 4 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

在C语言中,结构体是一种用户自定义的数据类型,可以将不同类型的数据组织起来形成一个新的数据类型。结构体通常由多个变量组成,这些变量可以是不同的数据类型,如整型、浮点型等。结构体的应用广泛,比如可以用来描述一本书的信息、一个人的基本信息、图形界面中控件的属性等。

1. 结构体定义的三种形式

在C语言中,定义结构体有三种形式:普通结构体、匿名结构体和位域结构体。

  1. 普通结构体:定义时需要指定结构体的名称,在后面使用该结构体的时候需要加上名称。
struct book {
    char name[50];
    char author[50];
    int pages;
    float price;
};
  1. 匿名结构体:没有结构体名称,只有成员名称。适合于只需要使用一次的结构体。
struct {
    char name[50];
    char author[50];
    int pages;
    float price;
} b1, b2;
  1. 位域结构体:可以将一个字节中的各个位分别命名并按需使用,用于对内存空间的优化。
struct {
    unsigned int a:1;  // 位域a占用1位
    unsigned int b:3;  // 位域b占用3位
    unsigned int c:4;  // 位域c占用4位
} bit;

2. 结构体与共同体的区别

结构体和共同体(union)都是由多个数据成员组成的复合类型。它们之间的主要区别在于对内存的使用方式不同。

结构体的所有成员在内存中是依次排列的,每个成员所占用的内存大小加起来就是整个结构体所占用的内存大小。而共同体的所有成员共享同一块内存空间,不同成员之间的值会相互影响。

下面是一个例子:

struct {
    int a;
    char b;
    double c;
} s;

union {
    int a;
    char b;
    double c;
} u;

printf("%dn", sizeof(s));   // 输出16
printf("%dn", sizeof(u));   // 输出8

其中,结构体s中有三个成员,分别占用4、1、8字节的内存空间,总共占用16个字节。而共同体u中虽然有三个成员,但它们共享同一块内存空间,占用最大的double类型所需的8个字节。因此,共同体u只占用8个字节的内存空间。

总之,结构体是一种用户自定义的数据类型,可以将不同类型的数据组织起来形成一个新的数据类型。在C语言中,定义结构体有三种形式:普通结构体、匿名结构体和位域结构体。另外,结构体和共同体都是由多个数据成员组成的复合类型,但它们之间的主要区别在于对内存的使用方式不同。

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
NC7SZ74K8X 1 Fairchild Semiconductor Corporation D Flip-Flop, LVC/LCX/Z Series, 1-Func, Positive Edge Triggered, 1-Bit, Complementary Output, CMOS, PDSO8, 3.10 MM, MO-187CA, US-8
$0.56 查看
ADUM1201ARZ-RL7 1 Analog Devices Inc Dual-Channel Digital Isolator (1/1 Channel Directionality)

ECAD模型

下载ECAD模型
$1.91 查看
SM15T39CA 1 Telefunken Semiconductor GmbH & Co Kg Transient Suppressor,
$0.9 查看

相关推荐

电子产业图谱