![結(jié)構(gòu)與聯(lián)合正規(guī)版資料_第1頁](http://file4.renrendoc.com/view/e9c8178539b8f4fb71b7fdd4b8c6359d/e9c8178539b8f4fb71b7fdd4b8c6359d1.gif)
![結(jié)構(gòu)與聯(lián)合正規(guī)版資料_第2頁](http://file4.renrendoc.com/view/e9c8178539b8f4fb71b7fdd4b8c6359d/e9c8178539b8f4fb71b7fdd4b8c6359d2.gif)
![結(jié)構(gòu)與聯(lián)合正規(guī)版資料_第3頁](http://file4.renrendoc.com/view/e9c8178539b8f4fb71b7fdd4b8c6359d/e9c8178539b8f4fb71b7fdd4b8c6359d3.gif)
![結(jié)構(gòu)與聯(lián)合正規(guī)版資料_第4頁](http://file4.renrendoc.com/view/e9c8178539b8f4fb71b7fdd4b8c6359d/e9c8178539b8f4fb71b7fdd4b8c6359d4.gif)
![結(jié)構(gòu)與聯(lián)合正規(guī)版資料_第5頁](http://file4.renrendoc.com/view/e9c8178539b8f4fb71b7fdd4b8c6359d/e9c8178539b8f4fb71b7fdd4b8c6359d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第七章結(jié)構(gòu)(jiégòu)與聯(lián)合第一頁,共46頁。2005年3月1本章主要(zhǔyào)內(nèi)容本章主要(zhǔyào)內(nèi)容包括:結(jié)構(gòu)體的概念結(jié)構(gòu)體類型變量的定義方法結(jié)構(gòu)體類型變量的使用形式和初始化結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體與函數(shù)聯(lián)合體第二頁,共46頁。2005年3月2引言(yǐnyán) 在實(shí)際的處理對象中,有許多信息是由多個(gè)(duōɡè)不同類型的數(shù)據(jù)組合在一起進(jìn)行描述,而且這些不同類型的數(shù)據(jù)是互相聯(lián)系組成了一個(gè)有機(jī)的整體。此時(shí),就要用到一種新的構(gòu)造類型數(shù)據(jù)——結(jié)構(gòu)體(structure),簡稱結(jié)構(gòu)。結(jié)構(gòu)體的使用為處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(如動態(tài)數(shù)據(jù)結(jié)構(gòu)等)提供了有效的手段,而且,它們?yōu)楹瘮?shù)間傳遞不同類型的數(shù)據(jù)提供了方便。 同時(shí)也介紹在相同存儲區(qū)域內(nèi)存儲不同數(shù)據(jù)類型的構(gòu)造類型――共用體(也稱聯(lián)合體)的相關(guān)概念。第三頁,共46頁。2005年3月37.1結(jié)構(gòu)(jiégòu)體的概念(續(xù)) 結(jié)構(gòu)體是用戶自定義的新數(shù)據(jù)類型,在結(jié)構(gòu)體中可以包含若干個(gè)不同數(shù)據(jù)類型和不同意義的數(shù)據(jù)項(xiàng)(當(dāng)然也可以相同),從而使這些數(shù)據(jù)項(xiàng)組合起來反映某一個(gè)信息。結(jié)構(gòu)體相當(dāng)于COBOL和PASCAL等高級語言中的“記錄”。 例如,可以定義一個(gè)職工worker結(jié)構(gòu)體,在這個(gè)結(jié)構(gòu)體中包括職工編號、姓名、性別、年齡、工資、家庭(jiātíng)住址、聯(lián)系。這樣就可以用一個(gè)結(jié)構(gòu)體數(shù)據(jù)類型的變量來存放某個(gè)職工的所有相關(guān)信息。并且,用戶自定義的數(shù)據(jù)類型worker也可以與int、double等基本數(shù)據(jù)類型一樣,用來作為定義其他變量的數(shù)據(jù)類型。第四頁,共46頁。2005年3月47.1結(jié)構(gòu)(jiégòu)體的概念(續(xù))定義一個(gè)結(jié)構(gòu)體類型的一般形式為:struct結(jié)構(gòu)體名{數(shù)據(jù)類型成員(chéngyuán)名1;數(shù)據(jù)類型成員(chéngyuán)名2;:數(shù)據(jù)類型成員(chéngyuán)名n;};
用分號“;”作為結(jié)束符。整個(gè)結(jié)構(gòu)的定義也用分號作為結(jié)束符?!俺蓡T(chéngyuán)表列”或“域表”命名規(guī)則與變量名相同基本變量類型和數(shù)組類型,也可以是指針類型,或者是一個(gè)結(jié)構(gòu)體類型。第五頁,共46頁。2005年3月57.1結(jié)構(gòu)(jiégòu)體的概念(續(xù))例如:定義一個(gè)(yīɡè)職工worker結(jié)構(gòu)體如下:structworker{longnumber;charname[20];charsex; //sex是成員名intage;floatsalary;charaddress[80];charphone[20];}; //注意分號不要省略intsex=10;//sex是變量名第六頁,共46頁。2005年3月67.1結(jié)構(gòu)(jiégòu)體的概念(續(xù)) 結(jié)構(gòu)體類型中的成員名可以與程序中的變量名相同(xiānɡtónɡ),二者并不代表同一對象,編譯程序可以自動對它們進(jìn)行區(qū)分。 最后,總結(jié)一下結(jié)構(gòu)體類型的特點(diǎn): (1)結(jié)構(gòu)體類型是用戶自定義構(gòu)造的。 (2)它由若干不同的基本數(shù)據(jù)類型的數(shù)據(jù)構(gòu)成。 (3)它屬于C++語言的一種數(shù)據(jù)類型,與整型、實(shí)型相當(dāng)。因此,定義它時(shí)不分配空間,只有用它定義變量時(shí)才分配空間。第七頁,共46頁。2005年3月7所以要特別注意包圍在大括號中的初始數(shù)據(jù)的順序,以及它們與各個(gè)成員項(xiàng)間的對應(yīng)關(guān)系。floatsalary;數(shù)據(jù)類型成員(chéngyuán)名1;structstudentstu[3];結(jié)構(gòu)體是用戶自定義的新數(shù)據(jù)類型,在結(jié)構(gòu)體中可以包含若干個(gè)不同數(shù)據(jù)類型和不同意義的數(shù)據(jù)項(xiàng)(當(dāng)然也可以相同),從而使這些數(shù)據(jù)項(xiàng)組合起來反映某一個(gè)信息。}worker1,worker2;最后,總結(jié)一下結(jié)構(gòu)體類型的特點(diǎn):用結(jié)構(gòu)體數(shù)組處理數(shù)據(jù)時(shí)可以使用循環(huán),從而使程序十分簡煉。structworkerfloatsalary;例如,對上面定義的結(jié)構(gòu)體類型變量worker1,可以(kěyǐ)這樣訪問各成員:workerworker1,worker2;2、將共用(ɡònɡyònɡ)體類型定義與共用(ɡònɡyònɡ)體變量定義分開:結(jié)構(gòu)體數(shù)組名表示該結(jié)構(gòu)體數(shù)組的存儲(cúnchǔ)首地址。charphone[20];數(shù)據(jù)類型成員(chéngyuán)名1;7.2結(jié)構(gòu)(jiégòu)體類型變量的定義方法 結(jié)構(gòu)體只是用戶自定義的一種數(shù)據(jù)類型,因此要通過定義結(jié)構(gòu)體類型的變量來使用(shǐyòng)這種類型。通常有三種形式來定義一個(gè)結(jié)構(gòu)體類型變量,分別說明如下:7.2.1先定義結(jié)構(gòu)體類型再定義變量名 這是C++語言中定義結(jié)構(gòu)體類型變量最常見的方式,一般語法格式如下:struct結(jié)構(gòu)體名{成員表列;};struct結(jié)構(gòu)體名變量名;第八頁,共46頁。2005年3月87.2.1先定義結(jié)構(gòu)體類型(lèixíng)再定義變量(續(xù))例如,定義幾個(gè)職工(zhígōng)變量:structworker{longnumber;charname[20];charsex;intage;floatsalary;charaddress[80];charphone[20];};structworkerworker1,worker2;第九頁,共46頁。2005年3月97.2.1先定義(dìngyì)結(jié)構(gòu)體類型再定義(dìngyì)變(續(xù)) 注意:“structworker”代表類型名,不能分開寫為:structworker1,worker2;
//錯(cuò)誤,沒有指明是哪種結(jié)構(gòu)體類型或workerworker1,worker2; //錯(cuò)誤,沒有struct關(guān)鍵字 //系統(tǒng)不認(rèn)為worker是結(jié)構(gòu)體類型 為了使用上的方便,程序員通常用一個(gè)符號(fúhào)常量代表一個(gè)結(jié)構(gòu)體類型。即在程序開頭加上下列語句: #defineWORKERstructworker; 這樣在程序中,WORKER與structworker完全等效。第十頁,共46頁。2005年3月107.2.1先定義(dìngyì)結(jié)構(gòu)體類型再定義(dìngyì)變(續(xù))例如:WORKER{longnumber;charname[20];charsex;intage;floatsalary;charaddress[80];charphone[20];};WORKERworker1,worker2;此時(shí),可以(kěyǐ)直接用WORKER定義worker1、worker2兩個(gè)變量,而不必再寫關(guān)鍵字struct。第十一頁,共46頁。2005年3月117.2.2在定義類型(lèixíng)的同時(shí)定義變量 如果程序規(guī)模比較大,往往將對結(jié)構(gòu)體類型的定義集中寫入到一個(gè)頭文件(以.h為后綴)中。哪個(gè)源文件需用到此結(jié)構(gòu)體類型則可用#include命令將該文件包含到本文件中。這樣做便于(biànyú)程序的修改和使用。 這種形式的定義的一般形式為: struct結(jié)構(gòu)體名 {
成員表列;
}變量名;第十二頁,共46頁。2005年3月127.2.2在定義類型(lèixíng)的同時(shí)定義變量(續(xù))例如:structworker{longnumber;charname[20];charsex;intage;floatsalary;charaddress[80];charphone[20];}worker1,worker2;此例與前例(qiánlì)作用相同,都定義了兩個(gè)變worker1、worker2,它們是結(jié)構(gòu)體類型structworker。第十三頁,共46頁。2005年3月137.2.3直接定義結(jié)構(gòu)(jiégòu)類型變量其一般形式(xíngshì)為:struct//沒有結(jié)構(gòu)體名{成員表列}變量名;第十四頁,共46頁。2005年3月147.2.3直接(zhíjiē)定義結(jié)構(gòu)類型變量(續(xù))例如(lìrú):struct{longnumber;charname[20];charsex;intage;floatsalary;charaddress[80];charphone[20];}worker1,worker2;第十五頁,共46頁。2005年3月157.2.3直接定義結(jié)構(gòu)類型(lèixíng)變量(續(xù)) 一個(gè)結(jié)構(gòu)體變量占用內(nèi)存的實(shí)際大小,也可以利用sizeof運(yùn)算求出。它的運(yùn)算表達(dá)式為: sizeof(運(yùn)算量) //求出給定的運(yùn)算量占用內(nèi)存空間的字節(jié)數(shù) 其中(qízhōng)運(yùn)算量可以是變量、數(shù)組或結(jié)構(gòu)體變量,也可以是數(shù)據(jù)類型的名稱。 例如: sizeof(structworker) sizeof(worker1)第十六頁,共46頁。2005年3月167.3結(jié)構(gòu)體變量的使用(shǐyòng)形式和初始化7.3.1結(jié)構(gòu)體變量的使用形式(xíngshì) 在定義了結(jié)構(gòu)體變量以后,就可以使用這個(gè)變量。結(jié)構(gòu)體變量是不同數(shù)據(jù)類型的若干數(shù)據(jù)的集合體。在程序中使用結(jié)構(gòu)體變量時(shí),一般情況下不能把它作為一個(gè)整體參加數(shù)據(jù)處理,而參加各種運(yùn)算和操作的是結(jié)構(gòu)體變量的各個(gè)成員項(xiàng)數(shù)據(jù)。 結(jié)構(gòu)體變量的成員用以下一般形式(xíngshì)表示: 結(jié)構(gòu)體變量名.成員名 例如,上節(jié)給出的結(jié)構(gòu)體變量worker1具有下列七個(gè)成員: ;;; ;;;
第十七頁,共46頁。2005年3月177.3.1結(jié)構(gòu)(jiégòu)體變量的使用形式(續(xù)) 在定義了結(jié)構(gòu)體變量后,就可以用不同的賦值方法對結(jié)構(gòu)體變量的每個(gè)成員(chéngyuán)賦值。例如: strcpy(,”ZhangSan”); worker1.age=26; strcpy(worker1.phone,”1234567”); worker1.sex=’m’; : : 除此之外,還可以引用結(jié)構(gòu)體變量成員(chéngyuán)的地址以及成員(chéngyuán)中的元素。例如:引用結(jié)構(gòu)體變量成員(chéngyuán)的首地址;引用結(jié)構(gòu)體變量成員(chéngyuán)的第二個(gè)字符[1];引用結(jié)構(gòu)體變量的首地址&worker1。第十八頁,共46頁。2005年3月187.3.1結(jié)構(gòu)體變量(biànliàng)的使用形式(續(xù)) 在使用結(jié)構(gòu)體類型變量時(shí)有以下幾點(diǎn)需要加以注意: (1)不能將一個(gè)結(jié)構(gòu)體類型變量作為一個(gè)整體加以引用,而只能對結(jié)構(gòu)體類型變量中的各個(gè)成員分別引用。 例如,對上面定義的結(jié)構(gòu)體類型變量wan,下列引用都是錯(cuò)誤的: cout<<wan; cin>>wan; 但是(dànshì)可以如下引用: cout<<; cin>>;第十九頁,共46頁。2005年3月197.3.1結(jié)構(gòu)體變量(biànliàng)的使用形式(續(xù)) (2)如果成員本身又屬一個(gè)結(jié)構(gòu)體類型,則要用若干個(gè)成員運(yùn)算符,一級一級地找到最低的一級成員。只能對最低級的成員進(jìn)行賦值或存取以及運(yùn)算。例如,對上面定義的結(jié)構(gòu)體類型變量worker1,可以(kěyǐ)這樣訪問各成員:
worker1.birthday.year worker1.birthday.month worker1.birthday.day 注意:不能用來訪問worker1變量中的成員birthday,因?yàn)閎irthday本身是一個(gè)結(jié)構(gòu)體變量。第二十頁,共46頁。2005年3月207.3.1結(jié)構(gòu)(jiégòu)體變量的使用形式(續(xù)) (3)對成員變量可以像普通變量一樣進(jìn)行(jìnxíng)各種運(yùn)算(根據(jù)其類型決定可以進(jìn)行(jìnxíng)的運(yùn)算)。例如: worker2.age=worker1.age; sum=worker1.age+worker2.age; worker1.age++; (4)在數(shù)組中,數(shù)組是不能彼此賦值的,而結(jié)構(gòu)體類型變量可以相互賦值。 在C++程序中,同一結(jié)構(gòu)體類型的結(jié)構(gòu)體變量之間允許相互賦值,而不同結(jié)構(gòu)體類型的結(jié)構(gòu)體變量之間不允許相互賦值,即使兩者包含有同樣的成員。第二十一頁,共46頁。2005年3月217.3.2結(jié)構(gòu)(jiégòu)體變量的初始化與其他類型變量一樣,也可以給結(jié)構(gòu)(jiégòu)體的每個(gè)成員賦初值,這稱為結(jié)構(gòu)(jiégòu)體的初始化。有兩種初始化形式,一種是在定義結(jié)構(gòu)(jiégòu)體變量時(shí)進(jìn)行初始化,一般語法格式如下: struct結(jié)構(gòu)(jiégòu)體名變量名={初始數(shù)據(jù)表}; 另一種是在定義結(jié)構(gòu)(jiégòu)體類型時(shí)進(jìn)行結(jié)構(gòu)(jiégòu)體變量的初始化。一般語法格式如下: struct結(jié)構(gòu)(jiégòu)體名 { 成員表列; }變量名={初始數(shù)據(jù)表};第二十二頁,共46頁。2005年3月227.3.2結(jié)構(gòu)(jiégòu)體變量的初始化(續(xù)) 例如,前述student結(jié)構(gòu)體類型的結(jié)構(gòu)體變量(biànliàng)wan在說明時(shí)可以初始化如下: structstudentwan={”WanJun”,’m’,20,”SuZhouRoadNo.100”}; 它所實(shí)現(xiàn)的功能,與下列分別對結(jié)構(gòu)體變量(biànliàng)的每個(gè)成員賦值所實(shí)現(xiàn)的功能相同: strcpy(,”WanJun”); wan.sex=’m’; wan.age=20; wan.addr=”SuZhouRoadNo.100”;第二十三頁,共46頁。2005年3月237.3.2結(jié)構(gòu)(jiégòu)體變量的初始化(續(xù)) 與數(shù)組的初始化特性相同,結(jié)構(gòu)體的初始化僅限于外部(wàibù)的和static型結(jié)構(gòu)體。也就是說,在函數(shù)內(nèi)部對結(jié)構(gòu)體進(jìn)行初始化時(shí),必須指定該結(jié)構(gòu)體為static型。對缺省存儲類型的auto型結(jié)構(gòu)體不能在函數(shù)內(nèi)部對它們進(jìn)行初始化。第二十四頁,共46頁。2005年3月247.4結(jié)構(gòu)(jiégòu)體數(shù)組 具有相同結(jié)構(gòu)體類型的結(jié)構(gòu)體變量也可以組成數(shù)組,稱它們?yōu)榻Y(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組的每一個(gè)(yīɡè)數(shù)組元素都是結(jié)構(gòu)體類型的數(shù)據(jù),它們都分別包括各個(gè)成員(分量)項(xiàng)。7.4.1結(jié)構(gòu)體數(shù)組的定義 定義結(jié)構(gòu)體數(shù)組的方法和定義結(jié)構(gòu)體變量的方法相仿,只需說明其為數(shù)組即可。可以采用三種方法:第二十五頁,共46頁。2005年3月257.4.1結(jié)構(gòu)(jiégòu)體數(shù)組的定義1.先定義結(jié)構(gòu)(jiégòu)體類型,再用它定義結(jié)構(gòu)(jiégòu)體數(shù)組。結(jié)構(gòu)(jiégòu)體數(shù)組的定義形式如下:struct結(jié)構(gòu)(jiégòu)體名 {成員表列;};struct結(jié)構(gòu)(jiégòu)體名結(jié)構(gòu)(jiégòu)體數(shù)組名[n];例如(lìrú):structstudent{charname[20];charsex;intage;charaddr[20];};structstudentstu[3];第二十六頁,共46頁。2005年3月267.4.1結(jié)構(gòu)(jiégòu)體數(shù)組的定義(續(xù))2.在定義結(jié)構(gòu)體類型同時(shí)定義結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組的定義形式如下:struct結(jié)構(gòu)體名 {成員(chéngyuán)表列;}數(shù)組名[元素個(gè)數(shù)];例如(lìrú):structstudent{charname[20];charsex;intage;charaddr[20];}stu[3];第二十七頁,共46頁。2005年3月277.4.1結(jié)構(gòu)(jiégòu)體數(shù)組的定義(續(xù))3.直接定義結(jié)構(gòu)(jiégòu)體數(shù)組結(jié)構(gòu)(jiégòu)體數(shù)組的定義形式如下:struct//沒有結(jié)構(gòu)(jiégòu)體名{成員表列; }數(shù)組名[元素個(gè)數(shù)];
例如(lìrú):struct{charname[20];charsex;intage;charaddr[20];}stu[3];第二十八頁,共46頁。2005年3月287.4.1結(jié)構(gòu)(jiégòu)體數(shù)組的定義(續(xù)) 結(jié)構(gòu)體數(shù)組名表示該結(jié)構(gòu)體數(shù)組的存儲(cúnchǔ)首地址。 結(jié)構(gòu)體數(shù)組適合于處理由若干具有相同關(guān)系的數(shù)據(jù)組成的數(shù)據(jù)集合體。用結(jié)構(gòu)體數(shù)組處理數(shù)據(jù)時(shí)可以使用循環(huán),從而使程序十分簡煉。第二十九頁,共46頁。2005年3月29共用體類型變量可以向另一個(gè)相同共用體類型的變量賦值。直接定義結(jié)構(gòu)(jiégòu)體數(shù)組floatsalary;floatsalary;charaddress[80];第二十九頁,共46頁。(3)對成員變量可以像普通變量一樣進(jìn)行(jìnxíng)各種運(yùn)算(根據(jù)其類型決定可以進(jìn)行(jìnxíng)的運(yùn)算)。1結(jié)構(gòu)體變量(biànliàng)的使用形式(續(xù))第二十七頁,共46頁。name或stu[2].在實(shí)際的處理對象中,有許多信息是由多個(gè)(duōɡè)不同類型的數(shù)據(jù)組合在一起進(jìn)行描述,而且這些不同類型的數(shù)據(jù)是互相聯(lián)系組成了一個(gè)有機(jī)的整體。floatsalary;除此之外,還可以引用結(jié)構(gòu)體變量成員(chéngyuán)的地址以及成員(chéngyuán)中的元素。結(jié)構(gòu)體可以(kěyǐ)按值傳遞,這種情況下整個(gè)結(jié)構(gòu)值都將被復(fù)制到形參中去。1共用(ɡònɡyònɡ)體的概念在實(shí)際的處理對象中,有許多信息是由多個(gè)(duōɡè)不同類型的數(shù)據(jù)組合在一起進(jìn)行描述,而且這些不同類型的數(shù)據(jù)是互相聯(lián)系組成了一個(gè)有機(jī)的整體。7.4.2結(jié)構(gòu)(jiégòu)體數(shù)組的初始化 結(jié)構(gòu)體數(shù)組在定義的同時(shí)也可以進(jìn)行(jìnxíng)初始化,并且與結(jié)構(gòu)體變量的初始化規(guī)定相同,只能對全局的或靜態(tài)存儲類別的結(jié)構(gòu)體數(shù)組初始化。 結(jié)構(gòu)體數(shù)組初始化的一般形式是:struct結(jié)構(gòu)體名{成員表列;};struct結(jié)構(gòu)體名數(shù)組名[元素個(gè)數(shù)]={初始數(shù)據(jù)表};第三十頁,共46頁。2005年3月307.4.2結(jié)構(gòu)(jiégòu)體數(shù)組的初始化(續(xù))或者:struct結(jié)構(gòu)體名{成員表列;}數(shù)組名[元素個(gè)數(shù)]={初始數(shù)據(jù)表}; 在對結(jié)構(gòu)體數(shù)組進(jìn)行初始化時(shí),方括號[]中元素個(gè)數(shù)可以不指定。編譯時(shí),系統(tǒng)會根據(jù)給出初始的結(jié)構(gòu)體常量的個(gè)數(shù)來確定數(shù)組元素的個(gè)數(shù)。 由于結(jié)構(gòu)體變量(biànliàng)是由若干不同類型的數(shù)據(jù)組成,而結(jié)構(gòu)體數(shù)組又是由若干結(jié)構(gòu)體變量(biànliàng)組成。所以要特別注意包圍在大括號中的初始數(shù)據(jù)的順序,以及它們與各個(gè)成員項(xiàng)間的對應(yīng)關(guān)系。第三十一頁,共46頁。2005年3月317.4.3結(jié)構(gòu)(jiégòu)體數(shù)組的使用(續(xù))一個(gè)結(jié)構(gòu)體數(shù)組的元素相當(dāng)于一個(gè)結(jié)構(gòu)體變量,因此前面介紹的有關(guān)結(jié)構(gòu)體變量的規(guī)則也適應(yīng)(shìyìng)于結(jié)構(gòu)體數(shù)組元素。以上面定義的結(jié)構(gòu)體數(shù)組stu[3]為例說明對結(jié)構(gòu)體數(shù)組的引用: (1)引用某一元素中的成員。 若要引用數(shù)組第二個(gè)元素的name成員,則可寫為: stu[1].name 若數(shù)組已如前所示進(jìn)行了初始化,則stu[1].name的值為“LiuYong”。第三十二頁,共46頁。2005年3月327.4.3結(jié)構(gòu)(jiégòu)體數(shù)組的使用(續(xù)) (2)可以將一個(gè)結(jié)構(gòu)體數(shù)組元素值賦給同一結(jié)構(gòu)體類型的數(shù)組中的另一個(gè)元素,或賦給同一類型的變量。如: structstudentstu[3],student1; 現(xiàn)在定義(dìngyì)了一個(gè)結(jié)構(gòu)體類型的數(shù)組,它有3個(gè)元素,又定義(dìngyì)了一個(gè)結(jié)構(gòu)體類型變量student1,則下面的賦值是合法的。 student1=stu[0]; stu[0]=stu[1]; stu[1]=student1;第三十三頁,共46頁。2005年3月337.4.3結(jié)構(gòu)(jiégòu)體數(shù)組的使用(續(xù)) (3)不能把結(jié)構(gòu)體數(shù)組元素作為一個(gè)整體直接進(jìn)行輸入輸出。如: cout<<stu[0];或 cin>>stu[0];都是錯(cuò)誤的。 只能以單個(gè)成員(chéngyuán)為對象進(jìn)行輸入輸出,如: cin>>stu[0].name; cin>>stu[1].num; cout<<stu[0].name; cout<<stu[1].num;第三十四頁,共46頁。2005年3月347.5結(jié)構(gòu)(jiégòu)體與函數(shù) 在調(diào)用函數(shù)時(shí),可以把結(jié)構(gòu)體變量的值作為參數(shù)傳遞給函數(shù)。由于結(jié)構(gòu)體是多個(gè)數(shù)據(jù)(shùjù)的集合體,當(dāng)把它們傳遞給函數(shù)時(shí),C++的編譯系統(tǒng)不允許把結(jié)構(gòu)體變量整體作為一個(gè)參數(shù)傳遞到函數(shù)中去。因此,只能把每個(gè)結(jié)構(gòu)體變量的成員作為一個(gè)個(gè)的參數(shù)傳遞到函數(shù)中去。例如,用stu[1].name或stu[2].age作函數(shù)實(shí)參,將實(shí)參值傳給形參。這種用法和用普通變量作實(shí)參是一樣的,屬“值傳遞”方式。這種方式一般不常用。
第三十五頁,共46頁。2005年3月357.5結(jié)構(gòu)(jiégòu)體與函數(shù)(續(xù))一種常用的方式是,與數(shù)組在函數(shù)間傳遞一樣,結(jié)構(gòu)體傳遞給函數(shù)時(shí),一般采用地址傳遞方式,即把結(jié)構(gòu)體變量(或數(shù)組)的存儲地址作為參數(shù)向函數(shù)傳遞,函數(shù)中用指向相同(xiānɡtónɡ)結(jié)構(gòu)體類型的指針接收該地址值。然后,在函數(shù)中通過這個(gè)結(jié)構(gòu)體指針來處理結(jié)構(gòu)體變量(或數(shù)組)中的各項(xiàng)數(shù)據(jù)。第三十六頁,共46頁。2005年3月367.5結(jié)構(gòu)(jiégòu)體與函數(shù)(續(xù))7.6.1傳遞結(jié)構(gòu)值 結(jié)構(gòu)體可以(kěyǐ)按值傳遞,這種情況下整個(gè)結(jié)構(gòu)值都將被復(fù)制到形參中去。7.6.2傳遞結(jié)構(gòu)體的引用 結(jié)構(gòu)體也可以(kěyǐ)引用傳遞,這種情況下僅僅把結(jié)構(gòu)體變量地址傳遞給形參。引用傳遞效率較高,因?yàn)樗挥脗鬟f整個(gè)結(jié)構(gòu)體變量的值,節(jié)省了傳遞的時(shí)間和空間。7.6.3傳遞結(jié)構(gòu)體的指針 結(jié)構(gòu)體變量(或數(shù)組)的值也可以(kěyǐ)通過結(jié)構(gòu)體指針傳遞,但程序的可讀性比引用傳遞要差一些。
第三十七頁,共46頁。2005年3月377.6共用(ɡònɡyònɡ)體7.6.1共用體的概念 在C++語言中,不同數(shù)據(jù)類型的數(shù)據(jù)可以使用共同的存儲區(qū)域(qūyù),這種數(shù)據(jù)構(gòu)造類型稱為共用體,簡稱共用,又稱聯(lián)合體。共用體在定義、說明和使用形式上與結(jié)構(gòu)體相似。兩者本質(zhì)上的不同僅在于使用內(nèi)存的方式上。 定義一個(gè)共用體類型的一般形式為: union共用體名 { 成員表列; };第三十八頁,共46頁。2005年3月387.6.1共用(ɡònɡyònɡ)體的概念例如: uniongy { inti; charc; floatf; }; 就定義了一個(gè)(yīɡè)共用體類型uniongy,它由三個(gè)成員組成,這三個(gè)成員在內(nèi)存中使用共同的存儲空間。由于共用體中各成員的數(shù)據(jù)長度往往不同,所以共用體變量在存儲時(shí)總是按其成員中數(shù)據(jù)長度最大的成員占用內(nèi)存空間。如上述共用體類型uniongy的變量占用4個(gè)字節(jié)的內(nèi)存。第三十九頁,共46頁。2005年3月397.6.1共用(ɡònɡyònɡ)體的概念(續(xù)) 在這一點(diǎn)上共用體與結(jié)構(gòu)體不同,結(jié)構(gòu)體類型變量在存儲時(shí)總是按各成員的數(shù)據(jù)長度之和占用內(nèi)存空間。 例如,定義(dìngyì)了一個(gè)結(jié)構(gòu)體類型: structgy { inti; charc; floatf; }; 則結(jié)構(gòu)體類型structgy的變量占用的內(nèi)存為2+1+4=7個(gè)字節(jié)。第四十頁,共46頁。2005年3月407.6.1共用(ɡònɡyònɡ)體的概念(續(xù)) 定義共用體類型變量的方法與定義結(jié)構(gòu)體類型變量的方法相似,也有三種(sānzhǒnɡ)方法:1、union共用體名 { 成員表列; }變量表列; 例如: uniongy { inti; charc; floatf; }a,b,c;第四十一頁,共46頁。2005年3月417.6.1共用(ɡònɡyònɡ)體的概念(續(xù))2、將共用(ɡònɡyònɡ)體類型定義與共用(ɡònɡyònɡ)體變量定義分開:uniongy{inti; charc; floatf;};uniongya,b,c;3、直接(zhíjiē)定義共用體
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物質(zhì)能源技術(shù)應(yīng)用案例分享與探討
- 物業(yè)服務(wù)和社區(qū)文化的雙重效應(yīng)
- 現(xiàn)代科技在餐飲業(yè)中的應(yīng)用與前景
- 現(xiàn)代住宅門的設(shè)計(jì)與環(huán)保理念結(jié)合
- 現(xiàn)代教育模式下的綠色科技與環(huán)境保護(hù)結(jié)合之路探討-以電池為例
- 現(xiàn)代物流業(yè)發(fā)展趨勢與企業(yè)戰(zhàn)略規(guī)劃
- 現(xiàn)代保安公司經(jīng)營模式與風(fēng)險(xiǎn)管理研究
- 未來商業(yè)視角下的磚塊技術(shù)研發(fā)方向探索
- 2024秋五年級英語上冊 Module 6 Unit 1 You can play football well說課稿6 外研版(三起)001
- 深度探索基于認(rèn)知規(guī)律的老齡化課程開發(fā)
- 四川省自貢市2024-2025學(xué)年上學(xué)期八年級英語期末試題(含答案無聽力音頻及原文)
- 2025-2030年中國汽車防滑鏈行業(yè)競爭格局展望及投資策略分析報(bào)告新版
- 2025年上海用人單位勞動合同(4篇)
- 二年級上冊口算題3000道-打印版讓孩子口算無憂
- 2025年生物安全年度工作計(jì)劃
- 通用電子嘉賓禮薄
- GB/T 28419-2012風(fēng)沙源區(qū)草原沙化遙感監(jiān)測技術(shù)導(dǎo)則
- GB/T 22077-2008架空導(dǎo)線蠕變試驗(yàn)方法
- DDI領(lǐng)導(dǎo)力-高績效輔導(dǎo)課件
- 水泥罐安裝與拆除專項(xiàng)施工方案
- 大學(xué)語文課件(完整版)
評論
0/150
提交評論