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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

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

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

intscore1,score2,score3;};字符數(shù)組的長度=實際長度+1(存儲結(jié)束標志)允許是已定義的另一個結(jié)構(gòu)體類型1、結(jié)構(gòu)體類型的定義

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

{數(shù)據(jù)類型數(shù)據(jù)項1;

數(shù)據(jù)類型數(shù)據(jù)項2;

…………

數(shù)據(jù)類型數(shù)據(jù)項n;

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

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

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

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

結(jié)構(gòu)體變量的引用與初始化[例2]利用[例1]中的結(jié)構(gòu)體類型std_info,定義結(jié)構(gòu)體變量student,用于存儲和顯示1個學生的信息。#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)體類型成員運算符程序運行結(jié)果:

No:000102Name:張三

Sex:男

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

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

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

,&student

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

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

[例3]利用structstd_info,定義一個結(jié)構(gòu)體數(shù)組student[3],用于存儲和顯示3個學生的基本情況。#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個空格字符*/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)變量程序運行結(jié)果:

No.NameSexBirthday000102張三男1980-9-20000105李四男1980-8-15000112王五女1980-3-101、結(jié)構(gòu)體數(shù)組的定義與結(jié)構(gòu)體變量的定義類似,可以直接或間接定義,只需說明為數(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)體變量的指針,訪問其各個成員。#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)變量成員運算符如果指針變量pointer已指向結(jié)構(gòu)體變量var,則以下三種形式等價:(1)var.成員(2)pointer->成員(3)(*pointer).成員思考:如果要求從鍵盤上輸入student的各成員數(shù)據(jù),如何修改程序?var只能是結(jié)構(gòu)體變量名pointer只能是指針變量括號不能缺!……voidmain(){structstd_info

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

p_std->birthday.year);…………}注:無論輸入或輸出,最低級成員的性質(zhì)(變量/指針),決定輸入項或輸出項表達式的性質(zhì)。取birthday.year的地址此處不能加&。為什么?(2)指向結(jié)構(gòu)體數(shù)組的指針[例5]使用指向結(jié)構(gòu)數(shù)組的指針來訪問結(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ù)組的下一個元素,而不是當前元素的下一個成員

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

[例6]編寫顯示函數(shù)display(),通過主函數(shù)調(diào)用來實現(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共同體類型1.共用體的概念、定義及其變量說明(1)共用體的概念

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

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

溫馨提示

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

評論

0/150

提交評論