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

字號:

前面的課程我們學習了一些簡單數(shù)據(jù)類型(整型、實型、字符型)的定義和應用,還學習了數(shù)組(一維、二維)的定義和應用,這些數(shù)據(jù)類型的特點是:當定義某一特定數(shù)據(jù)類型,就限定該類型變量的存儲特性和取值范圍。對簡單數(shù)據(jù)類型來說,既可以定義單個的變量,
    也可以定義數(shù)組。而數(shù)組的全部元素都具有相同的數(shù)據(jù)類型,或者說是相同數(shù)據(jù)類型的一個集合。
    在日常生活中,我們常會遇到一些需要填寫的登記表,如住宿表、成績表、通訊地址等。
    在這些表中,填寫的數(shù)據(jù)是不能用同一種數(shù)據(jù)類型描述的,在住宿表中我們通常會登記上姓名、性別、身份證號碼等項目;在通訊地址表中我們會寫下姓名、郵編、郵箱地址、電話號碼、E - m a i l等項目。這些表中集合了各種數(shù)據(jù),無法用前面學過的任一種數(shù)據(jù)類型完全描述,因此C引入一種能集中不同數(shù)據(jù)類型于一體的數(shù)據(jù)類型—結(jié)構(gòu)體類型。結(jié)構(gòu)體類型的變量可以擁有不同數(shù)據(jù)類型的成員,是不同數(shù)據(jù)類型成員的集合。
    在上面描述的各種登記表中,讓我們仔細觀察一下住宿表、成績表、通訊地址等。
    住宿表由下面的項目構(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; / * 學號* /
    char name[20]; / *姓名* /
    float os; / *操作系統(tǒng)* /
    float datastru; / * 數(shù)據(jù)結(jié)構(gòu)* /
    float compnet; / * 計算機網(wǎng)絡* /
    } ;
    通訊地址表:
    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)體名
    {
    成員項表列
    };
    有了結(jié)構(gòu)體類型,我們就可以定義結(jié)構(gòu)體類型變量,以對不同變量的各成員進行引用。