結(jié)構(gòu)體類型變量的定義和引用(一)

字號:

前面的課程我們學(xué)習(xí)了一些簡單數(shù)據(jù)類型(整型、實(shí)型、字符型)的定義和應(yīng)用,還學(xué)習(xí)了數(shù)組(一維、二維)的定義和應(yīng)用,這些數(shù)據(jù)類型的特點(diǎn)是:當(dāng)定義某一特定數(shù)據(jù)類型,就限定該類型變量的存儲特性和取值范圍。對簡單數(shù)據(jù)類型來說,既可以定義單個(gè)的變量,
    也可以定義數(shù)組。而數(shù)組的全部元素都具有相同的數(shù)據(jù)類型,或者說是相同數(shù)據(jù)類型的一個(gè)集合。
    在日常生活中,我們常會(huì)遇到一些需要填寫的登記表,如住宿表、成績表、通訊地址等。
    在這些表中,填寫的數(shù)據(jù)是不能用同一種數(shù)據(jù)類型描述的,在住宿表中我們通常會(huì)登記上姓名、性別、身份證號碼等項(xiàng)目;在通訊地址表中我們會(huì)寫下姓名、郵編、郵箱地址、電話號碼、E - m a i l等項(xiàng)目。這些表中集合了各種數(shù)據(jù),無法用前面學(xué)過的任一種數(shù)據(jù)類型完全描述,因此C引入一種能集中不同數(shù)據(jù)類型于一體的數(shù)據(jù)類型—結(jié)構(gòu)體類型。結(jié)構(gòu)體類型的變量可以擁有不同數(shù)據(jù)類型的成員,是不同數(shù)據(jù)類型成員的集合。
    在上面描述的各種登記表中,讓我們仔細(xì)觀察一下住宿表、成績表、通訊地址等。
    住宿表由下面的項(xiàng)目構(gòu)成:
    這些登記表用C提供的結(jié)構(gòu)體類型描述如下:
    住宿表:
    struct accommod
    {
    char name[20]; / *姓名* /
    char sex; / *性別* /
    char job[40]; / *職業(yè)* /
    int age; / *年齡* /
    long number; / *身份證號碼* /
    } ;
    成績表:
    struct score
    {
    char grade[20]; / * 班級* /
    long number; / * 學(xué)號* /
    char name[20]; / *姓名* /
    float os; / *操作系統(tǒng)* /
    float datastru; / * 數(shù)據(jù)結(jié)構(gòu)* /
    float compnet; / * 計(jì)算機(jī)網(wǎng)絡(luò)* /
    } ;
    通訊地址表:
    struct addr
    {
    char name[20];
    char department[30];/ * 部門* /
    char address[30]; / *住址* /
    long box; / * 郵編* /
    long phone; / * 電話號碼* /
    char email[30]; / * E m a i l * /
    };
    這一系列對不同登記表的數(shù)據(jù)結(jié)構(gòu)的描述類型稱為結(jié)構(gòu)體類型。由于不同的問題有不同的數(shù)據(jù)成員,也就是說有不同描述的結(jié)構(gòu)體類型。我們也可以理解為結(jié)構(gòu)體類型根據(jù)所針對的問題其成員是不同的,可以有任意多的結(jié)構(gòu)體類型描述。
    下面給出C對結(jié)構(gòu)體類型的定義形式:
    struct 結(jié)構(gòu)體名
    {
    成員項(xiàng)表列
    };
    有了結(jié)構(gòu)體類型,我們就可以定義結(jié)構(gòu)體類型變量,以對不同變量的各成員進(jìn)行引用。