• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            冰狼

            在努力、磨練、打擊下不斷地向著理想的財(cái)務(wù)自由方向前進(jìn)

            C語(yǔ)言中給出了另一種構(gòu)造數(shù)據(jù)類型——“結(jié)構(gòu)”。 它相當(dāng)于其它高級(jí)語(yǔ)言中的記錄。“結(jié)構(gòu)”是一種構(gòu)造類型,它是由若干“成員”組成的。 每一個(gè)成員可以是一個(gè)基本數(shù)據(jù)類型或者又是一個(gè)構(gòu)造類型。 結(jié)構(gòu)既是一種“構(gòu)造”而成的數(shù)據(jù)類型, 那么在說(shuō)明和使用之前必須先定義它,也就是構(gòu)造它。如同在說(shuō)明和調(diào)用函數(shù)之前要先定義函數(shù)一樣。

            一、結(jié)構(gòu)的定義
            定義一個(gè)結(jié)構(gòu)的一般形式為:
            struct 結(jié)構(gòu)名
            {
                成員表列
            };
            成員表由若干個(gè)成員組成, 每個(gè)成員都是該結(jié)構(gòu)的一個(gè)組成部分。對(duì)每個(gè)成員也必須作類型說(shuō)明,其形式為:
            類型說(shuō)明符 成員名;
            成員名的命名應(yīng)符合標(biāo)識(shí)符的書(shū)寫(xiě)規(guī)定。
            說(shuō)明結(jié)構(gòu)變量有以下三種方法。以上面定義的stu為例來(lái)加以說(shuō)明。
            1. 先定義結(jié)構(gòu),再說(shuō)明結(jié)構(gòu)變量。如:
            struct stu
            {
                int num;
                char name[20];
                char sex;
                float score;
            };
            struct stu boy1,boy2;
            說(shuō)明了兩個(gè)變量boy1和boy2為stu結(jié)構(gòu)類型。也可以用宏定義使一個(gè)符號(hào)常量來(lái)表示一個(gè)結(jié)構(gòu)類型,例如:
            #define STU struct stu
            STU
            {
                int num;
                char name[20];
                char sex;
                float score;
            };
            STU boy1,boy2;

            2. 在定義結(jié)構(gòu)類型的同時(shí)說(shuō)明結(jié)構(gòu)變量。例如:
            struct stu
            {
                int num;
                char name[20];
                char sex;
                float score;
            }boy1,boy2;

            3. 直接說(shuō)明結(jié)構(gòu)變量。例如:
            struct
            {
                int num;
                char name[20];
                char sex;
                float score;
            }boy1,boy2;
              第三種方法與第二種方法的區(qū)別在于第三種方法中省去了結(jié)構(gòu)名,而直接給出結(jié)構(gòu)變量。三種方法中說(shuō)明的boy1,boy2變量都具有圖7.1所示的結(jié)構(gòu)。說(shuō)明了boy1,boy2變量為stu類型后,即可向這兩個(gè)變量中的各個(gè)成員賦值。在上述stu結(jié)構(gòu)定義中,所有的成員都是基本數(shù)據(jù)類型或數(shù)組類型。成員也可以又是一個(gè)結(jié)構(gòu), 即構(gòu)成了嵌套的結(jié)構(gòu)。例如,圖7.2給出了另一個(gè)數(shù)據(jù)結(jié)構(gòu)。
            在ANSI C中除了允許具有相同類型的結(jié)構(gòu)變量相互賦值以外, 一般對(duì)結(jié)構(gòu)變量的使用,包括賦值、輸入、輸出、 運(yùn)算等都是通過(guò)結(jié)構(gòu)變量的成員來(lái)實(shí)現(xiàn)的。
              表示結(jié)構(gòu)變量成員的一般形式是: 結(jié)構(gòu)變量名.成員名
            如果結(jié)構(gòu)變量是全局變量或?yàn)殪o態(tài)變量, 則可對(duì)它作初始化賦值。對(duì)局部或自動(dòng)結(jié)構(gòu)變量不能作初始化賦值。
            數(shù)組的元素也可以是結(jié)構(gòu)類型的。 因此可以構(gòu)成結(jié)構(gòu)型數(shù)組。結(jié)構(gòu)數(shù)組的每一個(gè)元素都是具有相同結(jié)構(gòu)類型的下標(biāo)結(jié)構(gòu)變量。

            結(jié)構(gòu)指針變量的說(shuō)明和使用一個(gè)指針變量當(dāng)用來(lái)指向一個(gè)結(jié)構(gòu)變量時(shí), 稱之為結(jié)構(gòu)指針變量。
            結(jié)構(gòu)指針變量中的值是所指向的結(jié)構(gòu)變量的首地址。 通過(guò)結(jié)構(gòu)指針即可訪問(wèn)該結(jié)構(gòu)變量, 這與數(shù)組指針和函數(shù)指針的情況是相同的。結(jié)構(gòu)指針變量說(shuō)明的一般形式為:
            struct 結(jié)構(gòu)名*結(jié)構(gòu)指針變量名
            struct stu *pstu;

            當(dāng)然也可在定義stu結(jié)構(gòu)時(shí)同時(shí)說(shuō)明pstu。與前面討論的各類指針變量相同,結(jié)構(gòu)指針變量也必須要先賦值后才能使用。賦值是把結(jié)構(gòu)變量的首地址賦予該指針變量, 不能把結(jié)構(gòu)名賦予該指針變量。如果boy是被說(shuō)明為stu類型的結(jié)構(gòu)變量,則: pstu=&boy是正確的,而: pstu=&stu是錯(cuò)誤的。

              結(jié)構(gòu)名和結(jié)構(gòu)變量是兩個(gè)不同的概念,不能混淆。 結(jié)構(gòu)名只能表示一個(gè)結(jié)構(gòu)形式,編譯系統(tǒng)并不對(duì)它分配內(nèi)存空間。 只有當(dāng)某變量被說(shuō)明為這種類型的結(jié)構(gòu)時(shí),才對(duì)該變量分配存儲(chǔ)空間。 因此上面&stu這種寫(xiě)法是錯(cuò)誤的,不可能去取一個(gè)結(jié)構(gòu)名的首地址。 有了結(jié)構(gòu)指針變量,就能更方便地訪問(wèn)結(jié)構(gòu)變量的各個(gè)成員。

            其訪問(wèn)的一般形式為: (*結(jié)構(gòu)指針變量).成員名 或?yàn)椋?br>結(jié)構(gòu)指針變量->成員名
            例如: (*pstu).num或者: pstu->num
            應(yīng)該注意(*pstu)兩側(cè)的括號(hào)不可少, 因?yàn)槌蓡T符“.”的優(yōu)先級(jí)高于“*”。如去掉括號(hào)寫(xiě)作*pstu.num則等效于*(pstu.num),這樣,意義就完全不對(duì)了。

            結(jié)構(gòu)變量.成員名
            (*結(jié)構(gòu)指針變量).成員名
            結(jié)構(gòu)指針變量->成員名
              這三種用于表示結(jié)構(gòu)成員的形式是完全等效的。結(jié)構(gòu)數(shù)組指針變量結(jié)構(gòu)指針變量可以指向一個(gè)結(jié)構(gòu)數(shù)組, 這時(shí)結(jié)構(gòu)指針變量的值是整個(gè)結(jié)構(gòu)數(shù)組的首地址。 結(jié)構(gòu)指針變量也可指向結(jié)構(gòu)數(shù)組的一個(gè)元素,這時(shí)結(jié)構(gòu)指針變量的值是該結(jié)構(gòu)數(shù)組元素的首地址。設(shè)ps為指向結(jié)構(gòu)數(shù)組的指針變量,則ps也指向該結(jié)構(gòu)數(shù)組的0號(hào)元素,ps+1指向1號(hào)元素,ps+i則指向i號(hào)元素。 這與普通數(shù)組的情況是一致的。


            C語(yǔ)言中不允許動(dòng)態(tài)數(shù)組類型。例如: int n;scanf("%d",&n);int a[n]; 用變量表示長(zhǎng)度,想對(duì)數(shù)組的大小作動(dòng)態(tài)說(shuō)明, 這是錯(cuò)誤的。但是在實(shí)際的編程中,往往會(huì)發(fā)生這種情況, 即所需的內(nèi)存空間取決于實(shí)際輸入的數(shù)據(jù),而無(wú)法預(yù)先確定。對(duì)于這種問(wèn)題, 用數(shù)組的辦法很難解決。為了解決上述問(wèn)題,C語(yǔ)言提供了一些內(nèi)存管理函數(shù),這些內(nèi)存管理函數(shù)可以按需要?jiǎng)討B(tài)地分配內(nèi)存空間, 也可把不再使用的空間回收待用,為有效地利用內(nèi)存資源提供了手段。 常用的內(nèi)存管理函數(shù)有以下三個(gè):
            1.分配內(nèi)存空間函數(shù)malloc
            調(diào)用形式: (類型說(shuō)明符*) malloc (size) 功能:在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一塊長(zhǎng)度為"size" 字節(jié)的連續(xù)區(qū)域。函數(shù)的返回值為該區(qū)域的首地址。 “類型說(shuō)明符”表示把該區(qū)域用于何種數(shù)據(jù)類型。(類型說(shuō)明符*)表示把返回值強(qiáng)制轉(zhuǎn)換為該類型指針。“size”是一個(gè)無(wú)符號(hào)數(shù)。例如: pc=(char *) malloc (100); 表示分配100個(gè)字節(jié)的內(nèi)存空間,并強(qiáng)制轉(zhuǎn)換為字符數(shù)組類型, 函數(shù)的返回值為指向該字符數(shù)組的指針, 把該指針賦予指針變量pc。
            2.分配內(nèi)存空間函數(shù) calloc
            calloc 也用于分配內(nèi)存空間。調(diào)用形式: (類型說(shuō)明符*)calloc(n,size) 功能:在內(nèi)存動(dòng)態(tài)存儲(chǔ)區(qū)中分配n塊長(zhǎng)度為“size”字節(jié)的連續(xù)區(qū)域。函數(shù)的返回值為該區(qū)域的首地址。(類型說(shuō)明符*)用于強(qiáng)制類型轉(zhuǎn)換。calloc函數(shù)與malloc 函數(shù)的區(qū)別僅在于一次可以分配n塊區(qū)域。例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的結(jié)構(gòu)長(zhǎng)度。因此該語(yǔ)句的意思是:按stu的長(zhǎng)度分配2塊連續(xù)區(qū)域,強(qiáng)制轉(zhuǎn)換為stu類型,并把其首地址賦予指針變量ps。
            3.釋放內(nèi)存空間函數(shù)free
            調(diào)用形式: free(void*ptr); 功能:釋放ptr所指向的一塊內(nèi)存空間,ptr 是一個(gè)任意類型的指針變量,它指向被釋放區(qū)域的首地址。被釋放區(qū)應(yīng)是由malloc或calloc函數(shù)所分配的區(qū)域。


            “聯(lián)合”與“結(jié)構(gòu)”有一些相似之處。但兩者有本質(zhì)上的不同。在結(jié)構(gòu)中各成員有各自的內(nèi)存空間, 一個(gè)結(jié)構(gòu)變量的總長(zhǎng)度是各成員長(zhǎng)度之和。而在“聯(lián)合”中,各成員共享一段內(nèi)存空間, 一個(gè)聯(lián)合變量的長(zhǎng)度等于各成員中最長(zhǎng)的長(zhǎng)度。應(yīng)該說(shuō)明的是, 這里所謂的共享不是指把多個(gè)成員同時(shí)裝入一個(gè)聯(lián)合變量?jī)?nèi), 而是指該聯(lián)合變量可被賦予任一成員值,但每次只能賦一種值, 賦入新值則沖去舊值。如前面介紹的“單位”變量, 如定義為一個(gè)可裝入“班級(jí)”或“教研室”的聯(lián)合后,就允許賦予整型值(班級(jí))或字符串(教研室)。要么賦予整型值,要么賦予字符串,不能把兩者同時(shí)賦予它。聯(lián)合類型的定義和聯(lián)合變量的說(shuō)明一個(gè)聯(lián)合類型必須經(jīng)過(guò)定義之后, 才能把變量說(shuō)明為該聯(lián)合類型。
            一、聯(lián)合的定義
            定義一個(gè)聯(lián)合類型的一般形式為:
            union 聯(lián)合名
            {
                成員表
            };
            成員表中含有若干成員,成員的一般形式為: 類型說(shuō)明符 成員名 成員名的命名應(yīng)符合標(biāo)識(shí)符的規(guī)定。

            小結(jié)
            1. 結(jié)構(gòu)和聯(lián)合是兩種構(gòu)造類型數(shù)據(jù),是用戶定義新數(shù)據(jù)類型的重要手段。結(jié)構(gòu)和聯(lián)合有很多的相似之處,它們都由成員組成。成員可以具有不同的數(shù)據(jù)類型。成員的表示方法相同。都可用三種方式作變量說(shuō)明。
            2. 在結(jié)構(gòu)中,各成員都占有自己的內(nèi)存空間,它們是同時(shí)存在的。一個(gè)結(jié)構(gòu)變量的總長(zhǎng)度等于所有成員長(zhǎng)度之和。在聯(lián)合中,所有成員不能同時(shí)占用它的內(nèi)存空間,它們不能同時(shí)存在。聯(lián)合變量的長(zhǎng)度等于最長(zhǎng)的成員的長(zhǎng)度。
            3. “.”是成員運(yùn)算符,可用它表示成員項(xiàng),成員還可用“->”運(yùn)算符來(lái)表示。
            4. 結(jié)構(gòu)變量可以作為函數(shù)參數(shù),函數(shù)也可返回指向結(jié)構(gòu)的指針變量。而聯(lián)合變量不能作為函數(shù)參數(shù),函數(shù)也不能返回指向聯(lián)合的指針變量。但可以使用指向聯(lián)合變量的指針,也可使用聯(lián)合數(shù)組。
            5. 結(jié)構(gòu)定義允許嵌套,結(jié)構(gòu)中也可用聯(lián)合作為成員,形成結(jié)構(gòu)和聯(lián)合的嵌套。
            6. 鏈表是一種重要的數(shù)據(jù)結(jié)構(gòu),它便于實(shí)現(xiàn)動(dòng)態(tài)的存儲(chǔ)分配。本章介紹是單向鏈表,還可組成雙向鏈表,循環(huán)鏈表等。
            posted @ 2007-06-19 11:29 在法律保護(hù)下合法地?fù)屻y行 閱讀(894) | 評(píng)論 (0)編輯 收藏
            僅列出標(biāo)題
            共12頁(yè): 1 2 3 4 5 6 7 8 9 Last 

            公告

            轉(zhuǎn)載、引用、收藏,請(qǐng)標(biāo)明來(lái)自:

            http://www.shnenglu.com/paladino

            導(dǎo)航

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            統(tǒng)計(jì)

            留言簿(2)

            隨筆分類(10)

            文章分類(5)

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            国产精品狼人久久久久影院| 久久精品国产99国产精品导航| 久久国语露脸国产精品电影| 精品人妻伦九区久久AAA片69| 亚洲AV日韩精品久久久久| 久久精品人人做人人妻人人玩| 成人妇女免费播放久久久 | 亚洲av成人无码久久精品| 久久青青草原精品国产| 丰满少妇人妻久久久久久4| 久久久久九九精品影院| 亚洲AV无码一区东京热久久| 久久久久久久综合综合狠狠| 亚洲国产另类久久久精品黑人| 国产成人久久久精品二区三区 | 国产精品99久久不卡| A级毛片无码久久精品免费| 97精品伊人久久久大香线蕉| 亚洲国产精品一区二区久久hs| 嫩草影院久久国产精品| 少妇人妻88久久中文字幕| 久久久久99精品成人片三人毛片| 久久精品人人做人人爽97| 久久久久人妻一区二区三区| 欧美伊人久久大香线蕉综合69| 久久成人国产精品| 亚洲国产精品一区二区久久hs | 久久青青草原国产精品免费| 久久亚洲精品无码VA大香大香| 久久成人小视频| 久久久综合香蕉尹人综合网| 国产国产成人精品久久| 久久久久亚洲AV片无码下载蜜桃| 要久久爱在线免费观看| 久久嫩草影院免费看夜色| 久久精品国产欧美日韩| 国产精品久久久99| 久久成人精品| 欧美粉嫩小泬久久久久久久 | 久久国产香蕉视频| 久久久久婷婷|