• 正文
    • 1. 結(jié)構(gòu)體定義的三種形式
    • 2. 結(jié)構(gòu)體與共同體的區(qū)別
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

結(jié)構(gòu)體定義的三種形式 結(jié)構(gòu)體與共同體的區(qū)別

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

在C語(yǔ)言中,結(jié)構(gòu)體是一種用戶(hù)自定義的數(shù)據(jù)類(lèi)型,可以將不同類(lèi)型的數(shù)據(jù)組織起來(lái)形成一個(gè)新的數(shù)據(jù)類(lèi)型。結(jié)構(gòu)體通常由多個(gè)變量組成,這些變量可以是不同的數(shù)據(jù)類(lèi)型,如整型、浮點(diǎn)型等。結(jié)構(gòu)體的應(yīng)用廣泛,比如可以用來(lái)描述一本書(shū)的信息、一個(gè)人的基本信息、圖形界面中控件的屬性等。

1. 結(jié)構(gòu)體定義的三種形式

在C語(yǔ)言中,定義結(jié)構(gòu)體有三種形式:普通結(jié)構(gòu)體、匿名結(jié)構(gòu)體和位域結(jié)構(gòu)體。

  1. 普通結(jié)構(gòu)體:定義時(shí)需要指定結(jié)構(gòu)體的名稱(chēng),在后面使用該結(jié)構(gòu)體的時(shí)候需要加上名稱(chēng)。
struct book {
    char name[50];
    char author[50];
    int pages;
    float price;
};
  1. 匿名結(jié)構(gòu)體:沒(méi)有結(jié)構(gòu)體名稱(chēng),只有成員名稱(chēng)。適合于只需要使用一次的結(jié)構(gòu)體。
struct {
    char name[50];
    char author[50];
    int pages;
    float price;
} b1, b2;
  1. 位域結(jié)構(gòu)體:可以將一個(gè)字節(jié)中的各個(gè)位分別命名并按需使用,用于對(duì)內(nèi)存空間的優(yōu)化。
struct {
    unsigned int a:1;  // 位域a占用1位
    unsigned int b:3;  // 位域b占用3位
    unsigned int c:4;  // 位域c占用4位
} bit;

2. 結(jié)構(gòu)體與共同體的區(qū)別

結(jié)構(gòu)體和共同體(union)都是由多個(gè)數(shù)據(jù)成員組成的復(fù)合類(lèi)型。它們之間的主要區(qū)別在于對(duì)內(nèi)存的使用方式不同。

結(jié)構(gòu)體的所有成員在內(nèi)存中是依次排列的,每個(gè)成員所占用的內(nèi)存大小加起來(lái)就是整個(gè)結(jié)構(gòu)體所占用的內(nèi)存大小。而共同體的所有成員共享同一塊內(nèi)存空間,不同成員之間的值會(huì)相互影響。

下面是一個(gè)例子:

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

其中,結(jié)構(gòu)體s中有三個(gè)成員,分別占用4、1、8字節(jié)的內(nèi)存空間,總共占用16個(gè)字節(jié)。而共同體u中雖然有三個(gè)成員,但它們共享同一塊內(nèi)存空間,占用最大的double類(lèi)型所需的8個(gè)字節(jié)。因此,共同體u只占用8個(gè)字節(jié)的內(nèi)存空間。

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

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠(chǎng)商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
8655MH1501BLF 1 Amphenol FCi D Subminiature Connector
$4.08 查看
PMR205AB6100M047R30 1 KEMET Corporation RC Network, Isolated, 47ohm, 250V, 0.1uF, Through Hole Mount, 2 Pins, RADIAL LEADED, ROHS COMPLIANT
$4.84 查看
LMZM23601V5SILR 1 Texas Instruments 36-V, 1-A Step-Down DC-DC Power Module in 3.8-mm x 3-mm Package 10-uSiP -40 to 125

ECAD模型

下載ECAD模型
$51.09 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜