日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

21天学通C语言-学习笔记(12)

發(fā)布時(shí)間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 21天学通C语言-学习笔记(12) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

結(jié)構(gòu)體、共用體、枚舉和位域

結(jié)構(gòu)體聲明、定義與存儲(chǔ)形式

  • 結(jié)構(gòu)體在C語言中用于處理多個(gè)單一數(shù)據(jù)組成的數(shù)據(jù)集合。一個(gè)結(jié)構(gòu)體可以將多個(gè)單一信息結(jié)合在一起作為一個(gè)整體來使用。與整型等簡(jiǎn)單數(shù)據(jù)類型一樣,使用前需要進(jìn)行聲明:

    struct 結(jié)構(gòu)體名{ 數(shù)據(jù)類型1 結(jié)構(gòu)體成員1; 數(shù)據(jù)類型2 結(jié)構(gòu)體成員2; 數(shù)據(jù)類型3 結(jié)構(gòu)體成員3;
    … };這個(gè)數(shù)據(jù)類型名稱為:struct 結(jié)構(gòu)體名

  • 聲明之后,便可以使用該類型來定義結(jié)構(gòu)體變量:struct 結(jié)構(gòu)體名 變量名

  • 結(jié)構(gòu)體的存儲(chǔ)形式:一般的系統(tǒng)中,為了尋址的方便,數(shù)據(jù)在內(nèi)存中存儲(chǔ)時(shí),一般以其本身數(shù)據(jù)類型的字節(jié)長(zhǎng)度為基本單位對(duì)齊。而結(jié)構(gòu)體數(shù)據(jù)在存儲(chǔ)時(shí)是以其中字節(jié)長(zhǎng)度最大的成員的字節(jié)數(shù)為基本單位對(duì)齊的。結(jié)構(gòu)體中的成員分配的內(nèi)存空間是相鄰的。

  • 為了提高程序可讀性,最好在 main 函數(shù)外聲明結(jié)構(gòu)體數(shù)據(jù)類型。

結(jié)構(gòu)體的應(yīng)用

  • 訪問結(jié)構(gòu)體成員:使用成員操作符(.)可以訪問結(jié)構(gòu)體成員。前面的操作符為結(jié)構(gòu)體變量,后面的操作符為結(jié)構(gòu)體成員名。形式:
    結(jié)構(gòu)體名.結(jié)構(gòu)體成員名;
  • 初始化結(jié)構(gòu)體變量:與其他類型變量一樣,使用前最好進(jìn)行初始化。方法是可以使用一個(gè)數(shù)值序列依次為結(jié)構(gòu)體成員賦值。也可以只初始化部分成員,未被初始化的成員都被自動(dòng)清零。
  • 結(jié)構(gòu)體變量之間還可以直接賦值,比如data_t b = a;這句話將a的內(nèi)存內(nèi)容按字節(jié)依次賦值給b(淺復(fù)制)。但是,如果結(jié)構(gòu)體中含指針型成員的話,就會(huì)存在安全隱患,這時(shí)候要采用深復(fù)制的方式來賦值。
  • 結(jié)構(gòu)體數(shù)組

    結(jié)構(gòu)體數(shù)組就是結(jié)構(gòu)體類型變量為數(shù)組元素的數(shù)組。定義和初始化方法同上。

    結(jié)構(gòu)體指針

    聲明一個(gè)結(jié)構(gòu)體指針變量,然后再將變量初始化為一個(gè)存儲(chǔ)結(jié)構(gòu)體數(shù)據(jù)的內(nèi)存空間的首地址后,便可以使用這個(gè)指針來訪問結(jié)構(gòu)體了。

    結(jié)構(gòu)體小結(jié)

    結(jié)構(gòu)體的名稱較長(zhǎng),可以使用 typedef 來得到簡(jiǎn)化的別名。
    最好不要使用對(duì)于含有指針性成員的結(jié)構(gòu)體變量作為函數(shù)形參或返回值。

    共用體

    顧名思義,共用體可以使幾個(gè)不同成員共享同一塊內(nèi)存。優(yōu)點(diǎn):節(jié)省內(nèi)存空間,簡(jiǎn)化復(fù)雜數(shù)據(jù)的處理。

    首先聲明:union 共用體名{
    數(shù)據(jù)類型名 成員名1;
    數(shù)據(jù)類型名 成員名2;
    數(shù)據(jù)類型名 成員名3;

    };
    一個(gè)共用體類型的字節(jié)長(zhǎng)度為占用內(nèi)存空間最多的成員變量的字節(jié)長(zhǎng)度。

    然后定義:使用聲明后的共用體類型定義共用體變量。
    注意:由于共用體變量實(shí)際上只有一個(gè)有效成員,所以只能使用含一個(gè)值的序列進(jìn)行初始化;另外,不可以直接為共用體變量進(jìn)行賦值,需要通過賦值其成員來改變共用體的賦值空間;由于共用體中的所有成員共享一塊空間,因此,對(duì)任意成員的賦值都會(huì)影響其他成員的值,也不要在共用體中包含指針成員,尤其不要包含指向堆空間的指針成員。

    枚舉

    枚舉類型是一組相關(guān)數(shù)據(jù)的集合,它可以在定義常量的同時(shí),將這些常量結(jié)合在一個(gè)集中加強(qiáng)彼此的關(guān)系。其聲明如下:
    enum 枚舉類型名{
    枚舉成員1;
    枚舉成員2;
    枚舉成員3;

    }

    定義:enum 枚舉類型名 枚舉變量 = 常量;

    位域

    主要處理占用一個(gè)或幾個(gè)二進(jìn)制位的信息,它允許在結(jié)構(gòu)體內(nèi)以位為單位將其空間劃分為多個(gè)區(qū)域,并將其分配給結(jié)構(gòu)體的各個(gè)成員。形式如下:
    struct 結(jié)構(gòu)體名 {
    unsigned 位域成員1:常量1;
    unsigned 位域成員2:常量2;
    int 位域成員3:常量3;
    int 位域成員4:常量4;

    };
    位域成員的類型只能是 int 型或 unsigned 型。常量值指定了該區(qū)域所占的位數(shù),且該數(shù)值不能大于其數(shù)據(jù)類型所占位數(shù)。

    存儲(chǔ)形式:正常情況下,位域中的位域成員的內(nèi)存是相鄰的。但是,如果位域成員所占空間是不能跨兩個(gè)基本位域單元的。

    以上就是三種高級(jí)數(shù)據(jù)類型:結(jié)構(gòu)體、共用體和枚舉了。本章學(xué)習(xí)的數(shù)據(jù)類型的名稱都較長(zhǎng),可以使用 typedef 來得到簡(jiǎn)化的別名。

    總結(jié)

    以上是生活随笔為你收集整理的21天学通C语言-学习笔记(12)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。