《程序設(shè)計(jì)基礎(chǔ)-C語(yǔ)言》第8章-結(jié)構(gòu)體與共用體_第1頁(yè)
《程序設(shè)計(jì)基礎(chǔ)-C語(yǔ)言》第8章-結(jié)構(gòu)體與共用體_第2頁(yè)
《程序設(shè)計(jì)基礎(chǔ)-C語(yǔ)言》第8章-結(jié)構(gòu)體與共用體_第3頁(yè)
《程序設(shè)計(jì)基礎(chǔ)-C語(yǔ)言》第8章-結(jié)構(gòu)體與共用體_第4頁(yè)
《程序設(shè)計(jì)基礎(chǔ)-C語(yǔ)言》第8章-結(jié)構(gòu)體與共用體_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

structstd_info /*學(xué)生信息結(jié)構(gòu)類(lèi)型*/{charno[7];charname[9];charsex[3];

structdatebirthday;};structscore /*成績(jī)結(jié)構(gòu)類(lèi)型*/{charno[7];

intscore1,score2,score3;};字符數(shù)組的長(zhǎng)度=實(shí)際長(zhǎng)度+1(存儲(chǔ)結(jié)束標(biāo)志)允許是已定義的另一個(gè)結(jié)構(gòu)體類(lèi)型1、結(jié)構(gòu)體類(lèi)型的定義

struct結(jié)構(gòu)體類(lèi)型名

{數(shù)據(jù)類(lèi)型數(shù)據(jù)項(xiàng)1;

數(shù)據(jù)類(lèi)型數(shù)據(jù)項(xiàng)2;

…………

數(shù)據(jù)類(lèi)型數(shù)據(jù)項(xiàng)n;

};分號(hào)不能少!結(jié)構(gòu)體類(lèi)型關(guān)鍵字(1)“結(jié)構(gòu)體類(lèi)型名”和“數(shù)據(jù)項(xiàng)”的命名規(guī)則,與變量名相同。(2)相同數(shù)據(jù)類(lèi)型的數(shù)據(jù)項(xiàng),既可逐個(gè)、逐行分別定義,也可合并成一行定義。例如,[案例10.1]中的結(jié)構(gòu)體類(lèi)型date。

(3)結(jié)構(gòu)體類(lèi)型中的數(shù)據(jù)項(xiàng),允許是已定義的另一個(gè)結(jié)構(gòu)體類(lèi)型。例如,[案例10.1]中、結(jié)構(gòu)體類(lèi)型std_info的數(shù)據(jù)項(xiàng)“birthday”。2、結(jié)構(gòu)體變量的定義(1)間接定義──先定義類(lèi)型、再定義變量例如,利用[案例10.1]中、結(jié)構(gòu)體類(lèi)型std_info,定義結(jié)構(gòu)體變量student:

structstd_infostudent;則結(jié)構(gòu)體變量student擁有結(jié)構(gòu)體類(lèi)型std_info的全部數(shù)據(jù)項(xiàng)。結(jié)構(gòu)體類(lèi)型名不可缺!下列寫(xiě)法是錯(cuò)誤的:structstudent;(2)直接定義──定義類(lèi)型的同時(shí),定義變量

struct[結(jié)構(gòu)類(lèi)型名]{……}結(jié)構(gòu)變量表;說(shuō)明:結(jié)構(gòu)類(lèi)型中的數(shù)據(jù)項(xiàng)名(又稱(chēng)成員名),可以與程序中的變量同名。2*

結(jié)構(gòu)體變量的引用與初始化[例2]利用[例1]中的結(jié)構(gòu)體類(lèi)型std_info,定義結(jié)構(gòu)體變量student,用于存儲(chǔ)和顯示1個(gè)學(xué)生的信息。#include"struct.h"structstd_infostudent={"000102","張三","男",{1980,9,20}};#include"stdio.h"#include"conio.h"voidmain()

{printf("No:%s\n",student.no);printf("Name:%s\n",student.name);printf("Sex:%s\n",student.sex);printf("Birthday:%d-%d-%d\n",student.birthday.year,

student.birthday.month,student.birthday.day

);getch();}[例1]中定義的結(jié)構(gòu)體類(lèi)型成員運(yùn)算符程序運(yùn)行結(jié)果:

No:000102Name:張三

Sex:男

Birthday:1980-9-201、結(jié)構(gòu)體變量成員的引用規(guī)則(1)基本類(lèi)型:結(jié)構(gòu)變量.成員例如,student.no,等。(2)

結(jié)構(gòu)體類(lèi)型:結(jié)構(gòu)變量.成員[.成員……]例如:student.birthday.year student.birthday.month student.birthday.day

本身是結(jié)構(gòu)類(lèi)型,只能訪問(wèn)它的成員(3)最低1級(jí)成員,等價(jià)同類(lèi)型的普通變量。(4)既可引用結(jié)構(gòu)體變量成員的地址,也可引用結(jié)構(gòu)變量的地址。例如,&student.name

,&student

。2、結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量={初值表}與1維數(shù)組相似,但結(jié)構(gòu)體類(lèi)型成員的初值,是一個(gè)初值表。例如,structstd_infostudent={"000102","張三","男",{1980,9,20}}。注:初值的數(shù)據(jù)類(lèi)型,應(yīng)與結(jié)構(gòu)變量中相應(yīng)成員所要求的一致,否則會(huì)出錯(cuò)。[返回]3結(jié)構(gòu)體數(shù)組

結(jié)構(gòu)體數(shù)組的每一個(gè)元素,都是結(jié)構(gòu)體類(lèi)型數(shù)據(jù),均包含結(jié)構(gòu)體類(lèi)型的所有成員。

[例3]利用structstd_info,定義一個(gè)結(jié)構(gòu)體數(shù)組student[3],用于存儲(chǔ)和顯示3個(gè)學(xué)生的基本情況。#include"stdio.h"#include"conio.h"#include"struct.h"

structstd_infostudent[3]={{“000102”,“張三”,“男”,{1980,9,20}},

{“000105”,“李四”,“男”,{1980,8,15}},

{“000112”,“王五”,“女”,{1980,3,10}}};voidmain(){inti;/*打印表頭:"□"表示1個(gè)空格字符*/printf("No.□□□□Name□□□□□Sex□Birthday\n"); for(i=0;i<3;i++){printf("%-7s",student[i].no);printf("%-9s",student[i].name);printf("%-4s",student[i].sex);printf("%d-%d-%d\n",student[i].birthday.year,

student[i].birthday.month, student[i].birthday.day);}getch();}思考:student[i].nostudent.no[i]?數(shù)組元素是結(jié)構(gòu)變量程序運(yùn)行結(jié)果:

No.NameSexBirthday000102張三男1980-9-20000105李四男1980-8-15000112王五女1980-3-101、結(jié)構(gòu)體數(shù)組的定義與結(jié)構(gòu)體變量的定義類(lèi)似,可以直接或間接定義,只需說(shuō)明為數(shù)組即可。2、結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組[n]={{初值表1},{初值表2},...}思考:與2維數(shù)組初始化相似嗎?[返回]4*

指向結(jié)構(gòu)體數(shù)據(jù)的指針(1)指向結(jié)構(gòu)體變量的指針

[例4]使用指向結(jié)構(gòu)體變量的指針,訪問(wèn)其各個(gè)成員。#include"stdio.h"#include"conio.h"#include“struct.h”structstd_infostudent={“000102”,“張三”,“男”,{1980,9,20}};voidmain(){structstd_info

*p_std=&student;printf("No:%s\n",p_std->no);printf("Name:%s\n",p_std->name);printf("Sex:%s\n",p_std->sex);printf("Birthday:%d-%d-%d\n",p_std->birthday.year,

p_std->birthday.month, p_std->birthday.day);getch();}->:指向結(jié)構(gòu)變量成員運(yùn)算符如果指針變量pointer已指向結(jié)構(gòu)體變量var,則以下三種形式等價(jià):(1)var.成員(2)pointer->成員(3)(*pointer).成員思考:如果要求從鍵盤(pán)上輸入student的各成員數(shù)據(jù),如何修改程序?var只能是結(jié)構(gòu)體變量名pointer只能是指針變量括號(hào)不能缺!……voidmain(){structstd_info

*p_std=&student;printf(“No=”);scanf(“%s”,p_std->no);…………printf("year=“);scanf(“%d”,&

p_std->birthday.year);…………}注:無(wú)論輸入或輸出,最低級(jí)成員的性質(zhì)(變量/指針),決定輸入項(xiàng)或輸出項(xiàng)表達(dá)式的性質(zhì)。取birthday.year的地址此處不能加&。為什么?(2)指向結(jié)構(gòu)體數(shù)組的指針[例5]使用指向結(jié)構(gòu)數(shù)組的指針來(lái)訪問(wèn)結(jié)構(gòu)數(shù)組。#include"stdio.h"#include"conio.h"#include"struct.h"structstd_infostudent[3]={{"000102","張三","男",{1980,5,20}},{"000105","李四","男",{1980,8,15}},{“000112”,“王五”,“女”,{1980,3,10}}};voidmain(){structstd_info*p_std=student; inti=0;指向結(jié)構(gòu)數(shù)組student的指針/*打印表頭*/printf("No.□□□□Name□□□□□Sex□Birthday\n");/*輸出*/for(;i<3;i++,p_std++){printf("%-7s%-9s%-4s%4d-%2d-%2d\n",p_std->no,p_std->name,p_std->sex,p_std->birthday.year,

p_std->birthday.month,p_std->birthday.day);}getch();}指向結(jié)構(gòu)數(shù)組的下一個(gè)元素,而不是當(dāng)前元素的下一個(gè)成員

(3)指向結(jié)構(gòu)數(shù)據(jù)的指針作函數(shù)參數(shù)

[例6]編寫(xiě)顯示函數(shù)display(),通過(guò)主函數(shù)調(diào)用來(lái)實(shí)現(xiàn)[例5]的顯示。#include"stdio.h"#include"conio.h"#include"struct.h"structstd_infostudent[3]={{"000102","張三","男",{1980,5,20}},{"000105","李四","男",{1980,8,15}},{“000112”,“王五”,“女”,{1980,3,10}}};voiddisplay(structstd_info*p_std){printf("%-7s%-9s%-4s",p_std->no,p_std->name,p_std->sex);printf("%4d-%2d-%2d\n",p_std->birthday.year,p_std->birthday.month, p_std->birthday.day);}voidmain(){inti=0;printf("No.□□□□Name□□□□□Sex□Birthday\n");for(;i<3;i++){display(student+i); printf("\n");}getch();}[返回]8.4共同體類(lèi)型1.共用體的概念、定義及其變量說(shuō)明(1)共用體的概念

有時(shí)需要使幾種不同類(lèi)型的變量存放到同一段內(nèi)存單元中。例如,可把一個(gè)整型變量、一個(gè)字符型變量、一個(gè)實(shí)型變量放在同一個(gè)地址開(kāi)始的內(nèi)存單元中。即使用覆蓋技術(shù),幾個(gè)不同的變量共占同一段內(nèi)存的結(jié)構(gòu),稱(chēng)為“共用體”類(lèi)型的結(jié)構(gòu)。說(shuō)明:在結(jié)構(gòu)體中各成員有各自的內(nèi)存空間,一個(gè)結(jié)構(gòu)體變量的總長(zhǎng)度是各成員長(zhǎng)度之和。而在“共用體”中,各成員共享一段內(nèi)存空間,一個(gè)共用體變量的長(zhǎng)度等于各成員中最長(zhǎng)的長(zhǎng)度。

2.結(jié)構(gòu)類(lèi)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論