• 正文
  • 推薦器件
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

結構體定義的三種形式 結構體與共同體的區(qū)別

2023/06/12
2346
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

在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. 位域結構體:可以將一個字節(jié)中的各個位分別命名并按需使用,用于對內存空間的優(yōu)化。
struct {
    unsigned int a:1;  // 位域a占用1位
    unsigned int b:3;  // 位域b占用3位
    unsigned int c:4;  // 位域c占用4位
} bit;

2. 結構體與共同體的區(qū)別

結構體和共同體(union)都是由多個數據成員組成的復合類型。它們之間的主要區(qū)別在于對內存的使用方式不同。

結構體的所有成員在內存中是依次排列的,每個成員所占用的內存大小加起來就是整個結構體所占用的內存大小。而共同體的所有成員共享同一塊內存空間,不同成員之間的值會相互影響。

下面是一個例子:

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字節(jié)的內存空間,總共占用16個字節(jié)。而共同體u中雖然有三個成員,但它們共享同一塊內存空間,占用最大的double類型所需的8個字節(jié)。因此,共同體u只占用8個字節(jié)的內存空間。

總之,結構體是一種用戶自定義的數據類型,可以將不同類型的數據組織起來形成一個新的數據類型。在C語言中,定義結構體有三種形式:普通結構體、匿名結構體和位域結構體。另外,結構體和共同體都是由多個數據成員組成的復合類型,但它們之間的主要區(qū)別在于對內存的使用方式不同。

推薦器件

更多器件
器件型號 數量 器件廠商 器件描述 數據手冊 ECAD模型 風險等級 參考價格 更多信息
39-00-0046 1 Molex Push-On Terminal,
$0.06 查看
614JH 1 ebm-papst DC Fan, Axial Construction, 24V, 7.7W, GREEN
$95.62 查看
SMBJ5.0A 1 SynSemi Inc Transient Suppressor,
$0.42 查看

相關推薦

電子產業(yè)圖譜