第9章自订资料型态–结构、联合和列举课件

上传人:风*** 文档编号:244316838 上传时间:2024-10-03 格式:PPT 页数:43 大小:261KB
返回 下载 相关 举报
第9章自订资料型态–结构、联合和列举课件_第1页
第1页 / 共43页
第9章自订资料型态–结构、联合和列举课件_第2页
第2页 / 共43页
第9章自订资料型态–结构、联合和列举课件_第3页
第3页 / 共43页
点击查看更多>>
资源描述
按一下以編輯母片標題樣式,*,按一下以編輯母片,第二層,第三層,第四層,第五層,第,9,章,自訂資料型態,結構、聯合和列舉,9-1,結構資料型態,9-2,結構陣列,9-3,指標與結構,9-4,動態記憶體配置,9-5,聯合與列舉資料型態,9-6,建立,C,語言的新型態,9-7,位元欄位,9-1,結構資料型態,9-1-1,結構的基礎,9-1-2,結構宣告與基本使用,9-1-3,巢狀結構,9-1-4,結構與函數,9-1-1,結構的基礎,-,說明,結構(,Structures,)是,C,語言的延伸資料型態,它和聯合、列舉都屬於自定資料型態(,User-Defined Types,),可以讓程式設計者自行在程式碼定義新的資料型態。,結構是由一或多個不同資料型態(當然也可以是相同資料型態)所組成的集合,然後使用一個新名稱來代表,新名稱是一個新的資料型態,我們可以使用此新資料型態來宣告結構變數。,9-1-1,結構的基礎,-C,語言的結構,C,語言的結構如同資料庫的記錄,可以將複雜且相關的資料組合成一個記錄來方便存取。例如:圖形的點是由,X,軸和,Y,軸的座標,(x,y),所組成,如下所示:,struct,point,int,x;,int,y;,;,結構,point,可以代表圖形上的一個點的座標,(x,y),,當圖形是由數十到百點組成時,使用結構處理時,就能夠清楚分別哪一個,x,值是搭配哪一個,y,值的座標。,9-1-2,結構宣告與基本使用,-,語法,在,C,程式宣告結構是使用,struct,關鍵字來定義新的資料型態,其語法如下所示:,struct,結構名稱,資料型態 變數,1;,資料型態 變數,2;,;,語法定義名為,【,結構名稱,】,的新資料型態,程式設計者可以使用,C,語言的命名原則替結構命名,在結構中宣告的變數稱為該結構的成員(,Members,)。,9-1-2,結構宣告與基本使用,-,範例,例如:宣告學生資料的,student,結構,如下所示:,struct,student,int,stdId,;,char name20;,int,mathScore,;,int,englishScore,;,;,上述結構是由學號,stdId,、學生姓名,name,字元陣列的字串、數學成績,mathScore,和英文成績,englishScore,成員變數組成。,9-1-2,結構宣告與基本使用,-,宣告結構變數與初始值,(,說明,),當宣告,student,結構後,因為結構是一種自訂型態,換句話說,我們就可以在程式碼使用新型態來宣告變數,其語法如下所示:,struct,結構名稱 變數名稱,;,上述宣告使用,struct,關鍵字(,C,語言一定需要,struct,)開頭加上結構名稱來宣告結構變數,以,student,結構為例的結構變數宣告,如下所示:,struct,student std1;,struct,student std2=9402,小龍女,65,88;,struct,student std3;,9-1-2,結構宣告與基本使用,-,宣告結構變數與初始值,(,圖例,),例如:結構變數,std2,在等號之後使用大括號括起的內容依序是成員變數的初始值,如下圖所示:,9-1-2,結構宣告與基本使用,-,結構與成員變數的運算,在建立好結構變數後,就可以使用,.,運算子存取結構成員變數的值,如下所示:,std1.stdId=9401;,strcpy(std1.name,楊過,);,std1.mathScore=90;,std1.englishScore=77;,上述程式碼存取結構的成員變數,因為,name,是字串,所以使用,strcpy,(),函數來指定成員變數值。,ANSI-C,語言支援結構變數的指定敘述,如下所示:,std3=std2;,9-1-3,巢狀結構,-,說明,巢狀結構(,Nested Structures,)是在宣告的結構中擁有其他結構,如下所示:,struct,quiz,int,mathScore,;,int,englishScore,;,;,struct,student,int,stdId,;,char name20;,struct,quiz score;,;,9-1-3,巢狀結構,-,存取結構變數,我們可以在宣告,student,結構變數時,指定結構的初值,如下所示:,struct,student std2=9402,小龍女,65,88;,因為,score,是,student,結構的成員變數,所以在存取,score,結構的成員變數時,需要先存取結構變數,score,,然後才能存取成員變數,mathScore,和,englishScore,,如下所示:,std1.score.math=90;,std1.score.english=77;,9-1-4,結構與函數,-,結構宣告,結構是一種自訂資料型態,所以結構變數不只可以作為函數參數,還可以作為函數的傳回值,如下所示:,struct,point,int,x;,int,y;,;,上述結構擁有,x,和,y,共,2,個成員變數。,9-1-4,結構與函數,-,函數宣告,接著建立函數指定點座標和計算位移,函數的原型宣告,如下所示:,struct,point,setXY(int,int,);,struct,point,offset(struct,point,int,);,上述,2,個函數的傳回值都是,point,結構,,offset(),函數使用,point,結構作為參數,使用的是傳值呼叫。,因為,ANSI-C,支援結構變數的指定敘述,所以可以將函數傳回值指定給其它結構變數,如下所示:,p1=,offset(p,10);,9-2,結構陣列,-,建立,結構陣列(,Arrays of Structure,)是結構資料型態的陣列。首先我們需要宣告結構,例如:宣告,quiz,結構,如下所示:,struct,quiz,int,mathScore,;,int,englishScore,;,;,上述結構擁有,2,個成員變數,因為,quiz,是一種新資料型態,所以可以使用此型態建立一維陣列,如下所示:,#define MAXSIZE 3,struct,quiz,studentsMAXSIZE,;,9-2,結構陣列,-,存取,因為結構陣列是一種陣列,所以存取陣列索引,i,元素結構的成員變數,如下所示:,studentsi.mathScore,studentsi.englishScore,9-3,指標與結構,9-3-1,結構的指標變數,9-3-2,標準函式庫的,tm,日期,/,時間結構,9-3-1,結構的指標變數,-,宣告,如同,C,語言其它資料型態的指標變數,指標也可以指向結構,我們可以建立指標變數指向一個結構,如下所示:,struct,time,int,hours;,int,minutes;,int,seconds;,;,因為指標需要指向結構變數的位址,所以需要先宣告結構變數,然後才能建立指向結構的指標,如下所示:,struct,time now,*,ptr,;,9-3-1,結構的指標變數,-,指定結構變數值,接著將結構指標指向結構,如下所示:,ptr,=,上述結構指標,ptr,指向結構變數,now,的位址。現在,我們就可以使用指標存取結構的成員變數,如下所示:,(*,ptr).minutes,=35;,上述程式碼先使用取值運算子取得結構變數,now,,然後存取成員變數,minutes,,程式碼相當於是,now.minutes,=35;,。在,C,語言提供結構指標的,-,運算子,可以直接存取結構的成員變數,如下所示:,ptr,-hours=18;,9-3-2,標準函式庫的,tm,日期,/,時間結構,-,結構宣告,struct,tm,int,tm_sec,;/*,秒,:0-59*/,int,tm_min,;/*,分,:0-59*/,int,tm_hour,;/*,時,:0-23*/,int,tm_mday,;/*,日,:1-31*/,int,tm_mon,;/*,月,:0-11*/,int,tm_year,;/*,年,:,從,1900,年起算*,/,int,tm_wday,;/*,星期,:,從星期日起,(0-6)*/,int,tm_yday,;/*,天數,:,從,1/1,日起算,:0-365*/,int,tm_isdst,;/*,是否是日光節約時間,,1,是,0,不是,-1,不知*,/,;,9-3-2,標準函式庫的,tm,日期,/,時間結構,-,常用的日期/時間函數,9-4,動態記憶體配置,9-4-1,動態記憶體配置,-,malloc,(),和,free(),函數,9-4-2,配置陣列的記憶體,9-4-3,配置結構的記憶體,9-4-1,動態記憶體配置,-,malloc,(),函數,(,說明,),配置記憶體:,malloc,(),函數,在,C,語言程式碼呼叫,malloc,(),函數,可以向作業系統取得一塊可用的記憶體空間,其說明如下表所示:,9-4-1,動態記憶體配置,-,malloc,(),函數,(,語法,),當程式需要配置,size,尺寸的記憶體空間時,因為函數傳回,void,通用型指標,所以需要加上型態迫換,將函數傳回的指標轉換成指定資料型態的指標,其語法如下所示:,fp,=(,資料型態*,),malloc(sizeof,(,資料型態,);,程式碼使用,sizeof,運算子取得指定資料型態的大小,在此的型態包括整數、字元、浮點數等基本資料型態和結構等延伸資料型態。,9-4-1,動態記憶體配置,-,malloc,(),函數,(,範例,),例如:配置一個浮點數變數的記憶空間,如下所示:,fp,=(float*),malloc(sizeof(float,);,上述程式碼配置一塊浮點數的記憶空間,,fp,是浮點數的指標變數。傳回值經過型態迫換成,float,指標後,,malloc,(),函數傳回一個浮點的記憶體指標且指定給指標,fp,。,如果記憶體空間不足,函數,malloc,(),傳回空指標,NULL,,程式需確定記憶體配置成功,傳回有效指標後才能使用配置的記憶體,如下所示:,if(,fp,!=NULL).,9-4-1,動態記憶體配置,-free(),函數,(,說明,),釋放配置的記憶體:,free(),函數,在,C,程式需要自行將配置的記憶體空間歸還,以便歸還的記憶體空間可以在下次呼叫,malloc,(),函數時再重新配置,,free(),函數和,malloc,(),函數的功能相反,可以釋放配置的記憶體空間,其說明如下表所示:,9-4-1,動態記憶體配置,-free(),函數,(,範例,),例如:指標,fp,是指向,malloc,(),傳回的浮點數記憶空間的指標,然後就可以呼叫,free(),函數釋放此塊記憶體,如下所示:,free(fp,);,上述程式碼的指標,fp,以此例是,float,浮點數,它就是,malloc,(),函數傳回的指標或結構指標。,9-4-2,配置陣列的記憶體,陣列是相同型態的變數集合,在,C,程式只需配置一整塊連續的記憶空間就可以當成陣列來使用。首先宣告一個陣列資料型態的指標變數,如下所示:,int,*score;,上述整數指標可以用來指向整數陣列,接著呼叫,malloc,(),函數配置所需的記憶體空間,如下所示:,score=(,int,*),malloc(num,*,sizeof(int,);,上述程式碼的,num,變數是陣列元素的個數,記憶體空間大小是以個數,num,乘以,sizeof,運算子的整數型態大小,即,num*,sizeof(int,),計算而得。,9-4-3,配置結構的記憶體,結構或結構陣列也一樣可以使用動態記憶體配置來配置記憶體空間,筆者準備直接修改第,9-2,節的,Ch9-2.c,程式範例,改為動態記憶體配置建立結構陣列,如下所示:,struct,quiz*students;,students=(,struct,quiz*),malloc(num,*,si
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!