站長資訊網
        最全最豐富的資訊網站

        結構體類型變量的定義和引用

        前面的課程我們學習了一些簡單數據類型(整型、實型、字符型)的定義和應用,還學習了數組(一維、二維)的定義和應用,這些數據類型的特點是:當定義某一特定數據類型,就限定該類型變量的存儲特性和取值范圍。對簡單數據類型來說,既可以定義單個的變量,
        也可以定義數組。而數組的全部元素都具有相同的數據類型,或者說是相同數據類型的一個集合。
        在日常生活中,我們常會遇到一些需要填寫的登記表,如住宿表、成績表、通訊地址等。
        在這些表中,填寫的數據是不能用同一種數據類型描述的,在住宿表中我們通常會登記上姓名、性別、身份證號碼等項目;在通訊地址表中我們會寫下姓名、郵編、郵箱地址、電話號碼、E – m a i l等項目。這些表中集合了各種數據,無法用前面學過的任一種數據類型完全描述,因此C引入一種能集中不同數據類型于一體的數據類型—結構體類型。結構體類型的變量可以擁有不同數據類型的成員,是不同數據類型成員的集合。
        在上面描述的各種登記表中,讓我們仔細觀察一下住宿表、成績表、通訊地址等。
        住宿表由下面的項目構成:
        結構體類型變量的定義和引用
        這些登記表用C提供的結構體類型描述如下:
        住宿表:
        struct accommod
        {
        char name[20]; / *姓名* /
        char sex; / *性別* /
        char job[40]; / *職業* /
        int age; / *年齡* /
        long number; / *身份證號碼* /
        } ;
        成績表:
        struct score
        {
        char grade[20]; / * 班級* /
        long number; / * 學號* /
        char name[20]; / *姓名* /
        float os; / *操作系統* /
        float datastru; / * 數據結構* /
        float compnet; / * 計算機網絡* /
        } ;
        通訊地址表:
        struct addr
        {
        char name[20];
        char department[30];/ * 部門* /
        char address[30]; / *住址* /
        long box; / * 郵編* /
        long phone; / * 電話號碼* /
        char email[30]; / * E m a i l * /
        };
        這一系列對不同登記表的數據結構的描述類型稱為結構體類型。由于不同的問題有不同的數據成員,也就是說有不同描述的結構體類型。我們也可以理解為結構體類型根據所針對的問題其成員是不同的,可以有任意多的結構體類型描述。
        下面給出C對結構體類型的定義形式:
        struct 結構體名
        {
        成員項表列
        };
        有了結構體類型,我們就可以定義結構體類型變量,以對不同變量的各成員進行引用。
        7.1.1 結構體類型變量的定義
        結構體類型變量的定義與其它類型的變量的定義是一樣的,但由于結構體類型需要針對問題事先自行定義,所以結構體類型變量的定義形式就增加了靈活性,共計有三種形式,分別介紹如下:
        1) 先定義結構體類型,再定義結構體類型變量:
        struct stu / *定義學生結構體類型* /
        {
        char name[20]; / * 學生姓名* /
        char sex; / * 性別* /
        long num; / *學號* /
        float score[3]; / * 三科考試成績* /
        };
        struct stu student1,student2;/ * 定義結構體類型變量* /
        struct stu student3,student4;
        用此結構體類型,可以定義更多的該結構體類型變量。
        2 ) 定義結構體類型同時定義結構體類型變量:
        struct data
        {
        int day;
        int month;
        int year;
        } time1,time2;
        也可以再定義如下變量:
        struct data time3,time4;
        用此結構體類型,同樣可以定義更多的該結構體類型變量。
        3) 直接定義結構體類型變量:
        struct
        {
        char name[20]; / *學生姓名* /
        char sex; / *性別* /
        long num; / *學號* /
        float score[3]; / *三科考試成績* /
        } person1,person2; / *定義該結構體類型變量* /
        該定義方法由于無法記錄該結構體類型,所以除直接定義外,不能再定義該結構體類型變量。

        7.1.2 結構體類型變量的引用
        結構體類型變量的定義和引用
        學習了怎樣定義結構體類型和結構體類型變量,怎樣正確地引用該結構體類型變量的成員呢?C 規定引用的形式為:
        <結構體類型變量名> . <成員名>
        若我們定義的結構體類型及變量如下:
        struct data
        {
        int day;
        int month;
        int year;
        } time1,time2;
        則變量time1和time2各成員的引用形式為:time1.day、
        time1.month、time1.year及time2.day、time2.month、
        time2.year,如圖7-1所示。
        其結構體類型變量的各成員與相應的簡單類型變量使
        用方法完全相同。
        7.1.3結構體類型變量的初始化
        由于結構體類型變量匯集了各類不同數據類型的成員,所以結構體類型變量的初始化就略顯復雜。
        結構體類型變量的定義和初始化為:
        struct stu / *定義學生結構體類型* /
        {
        char name[20]; / * 學生姓名* /
        char sex; / * 性別* /
        long num; / *學號* /
        float score[3]; / * 三科考試成績* /
        };
        struct stu student={“liping”,’f’,970541,98.5,97.4,95};
        結構體類型變量的定義和引用
        我們也可以通過C提供的輸入輸出函數完成對結構體類型變量成員的輸入輸出。由于結構體類型變量成員的數據類型通常是不一樣的,所以要將結構體類型變量成員以字符串的形式輸入,利用C的類型轉換函數將其轉換為所需類型。類型轉換的函數是:
        int atoi(char *str);轉換str所指向的字符串為整型,其函數的返回值為整型。
        double atof(char*str);轉換str所指向的字符串為實型,其函數的返回值為雙精度的實型。
        long atol(char*str);轉換str所指向的字符串為長整型,其函數的返回值為長整型。
        使用上述函數,要包含頭文件”stdlib.h”。
        對上述的結構體類型變量成員輸入采用的一般形式:
        char temp[20];
        gets(student.name);/*輸入姓名*/
        student.sex=getchar();/*輸入性別*/
        gets(temp);/*輸入學號*/
        student.num=atol(temp);/*轉換為長整型*/
        for(i=0;i<3;i++)/*輸入三科成績*/
        {
        gets(temp);
        student.score[i]=atoi(temp);
        }
        對該結構體類型變量成員的輸出也必須采用各成員獨立輸出,而不能將結構體類型變量以整體的形式輸入輸出。
        C允許針對具體問題定義各種各樣的結構體類型,甚至是嵌套的結構體類型。
        structdata
        {
        intday;
        上述對結構體類型變量的三種定義形式均可在定義時初始化。結構體類型變量完成初始化后,即各成員的值分別為:student.name=”liping”、student.sex=’f’、student.num=970541、
        student.score[0]=98.5、student.score[1]=97.4、student.score[2]=95。其存儲在內存的情況如圖7-2所示。
        int mouth;
        int year;
        } ;
        struct stu
        {
        char name[20];
        struct data birthday; 出/*生年月,嵌套的結構體類型*/
        long num;
        } person;
        該結構體類型變量成員的引用形式: person.name 、person.birthday.day、person. birthday.month、person. birthday. y e a r、person.num 。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产成人精品午夜福麻豆| 国产精品青青在线观看爽香蕉| 91久久精品91久久性色| 久久亚洲精品无码播放| 精品国产美女福利到在线不卡| 亚洲一区爱区精品无码| 国产在线精品一区免费香蕉| 国产精品亚洲午夜一区二区三区| 亚洲精品无码永久在线观看你懂的| 国产精品电影在线| 久久91精品国产91久久小草 | 精品国产午夜理论片不卡| 亚洲精品无码成人片在线观看 | 国精品午夜福利视频不卡| 亚洲国产成人精品女人久久久 | 四虎国产精品免费久久| 国产亚洲精品拍拍拍拍拍| 亚洲精品免费视频| 国产成人精品视频播放| 精品国产精品国产偷麻豆| 亚洲一区二区三区在线观看精品中文| 久久久久99精品成人片| 国产午夜精品理论片久久| 成人国产精品一区二区视频| 国内精品久久国产大陆| 精品国产一区二区三区不卡| 久久婷婷国产综合精品| 欧美午夜精品久久久久免费视| 亚洲欧美日韩国产精品一区二区| 四库影院永久四虎精品国产| 美女岳肉太深了使劲国产精品亚洲专一区二区三区 | 自拍偷自拍亚洲精品被多人伦好爽| 精品国产成人国产在线观看 | 老湿亚洲永久精品ww47香蕉图片| 国产99精品一区二区三区免费| 欧美精品一区二区三区视频| 久久99国产精品久久99果冻传媒| 国内精品伊人久久久久| 久久这里只精品国产99热| 欧美视频精品一区二区三区| 久久99国产精品99久久|