快速學(xué)會數(shù)據(jù)結(jié)構(gòu)中的指針和結(jié)構(gòu)體.ppt_第1頁
快速學(xué)會數(shù)據(jù)結(jié)構(gòu)中的指針和結(jié)構(gòu)體.ppt_第2頁
快速學(xué)會數(shù)據(jù)結(jié)構(gòu)中的指針和結(jié)構(gòu)體.ppt_第3頁
快速學(xué)會數(shù)據(jù)結(jié)構(gòu)中的指針和結(jié)構(gòu)體.ppt_第4頁
快速學(xué)會數(shù)據(jù)結(jié)構(gòu)中的指針和結(jié)構(gòu)體.ppt_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

,指針,指針的定義 聲明一個指針變量 給指針賦值 指針的運算,自定義數(shù)據(jù)類型,基本數(shù)據(jù)類型 數(shù)據(jù)類型 結(jié)構(gòu)類型,基本數(shù)據(jù)類型有哪些? 如何使用?,問題一:學(xué)籍管理,問題:學(xué)籍管理需要每個學(xué)生的下列數(shù)據(jù):學(xué)號、姓名、性別、年齡、分?jǐn)?shù),請用C語言程序存儲并處理一組學(xué)生的學(xué)籍。,單個學(xué)生學(xué)籍的數(shù)據(jù)結(jié)構(gòu) 學(xué)號(num):int型 姓名(name):char 型 性別(sex):char型 年齡(age):int型 分?jǐn)?shù)(score):float型,單個學(xué)生學(xué)籍的數(shù)據(jù)結(jié)構(gòu)如何定義?,多個學(xué)生學(xué)籍的數(shù)據(jù)結(jié)構(gòu)如何定義?,解決辦法,定義一個結(jié)構(gòu)體類型 當(dāng)已有的類型滿足不了需要時,C語言規(guī)定可以由用戶自定義數(shù)據(jù)類型。 struct student int num; char name10; char sex; int age; float score; ;,另一個例子,定義一個結(jié)構(gòu)體類型 日期類型 struct date int month; int day; int year; ;,定義一個結(jié)構(gòu)體類型,語法: struct 結(jié)構(gòu)體名稱 成員列表; ; 定義一個時間類型Time,成員有時、分、秒。,結(jié)構(gòu)體變量的定義 先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量 一般形式:,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . ; struct 結(jié)構(gòu)體名 變量名表列;,例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2;,說明 結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同 類型:不分配內(nèi)存; 變量:分配內(nèi)存 類型:不能賦值、存取、運算; 變量:可以 結(jié)構(gòu)體的成員可以是一個結(jié)構(gòu)變量 結(jié)構(gòu)體可嵌套 結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆 結(jié)構(gòu)體類型及變量的作用域與生存期,諸如學(xué)生花名冊、通訊錄之類的數(shù)據(jù),最適合用結(jié)構(gòu)體來處理。因為這類數(shù)據(jù)具有如下特點: 每個人信息都是一個復(fù)合的構(gòu)造數(shù)據(jù),如由姓名、學(xué)號、性別、年齡、家庭住址、聯(lián)系電話等“成員”組成。 不同的人,數(shù)據(jù)的值不同,但都有共同的成員組成。,為將不同數(shù)據(jù)類型、但相互關(guān)聯(lián)的一組數(shù)據(jù),組合成一個有機(jī)整體使用,C語言提供一種稱為“結(jié)構(gòu)”的數(shù)據(jù)類型。,結(jié)構(gòu)體 也是構(gòu)造類數(shù)據(jù),但其成員可以是任何類型的。,構(gòu)造類型使用戶可以象處理單個變量一樣來處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。,要在程序中使用結(jié)構(gòu)必須: 聲明結(jié)構(gòu)類型 結(jié)構(gòu)類型的聲明描述該結(jié)構(gòu)的成員名稱和它們的數(shù)據(jù)類型。 定義結(jié)構(gòu)變量 結(jié)構(gòu)變量的定義是根據(jù)結(jié)構(gòu)類型為所定義變量分配存儲空間。,9.3 結(jié)構(gòu)體變量的引用 引用規(guī)則 結(jié)構(gòu)體變量不能整體引用,只能引用變量成員,可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量 結(jié)構(gòu)體嵌套時逐級引用(只能對最低級的成員進(jìn)行賦值或存取以及運算),成員(分量)運算符 優(yōu)先級: 1 結(jié)合性:從左向右,引用方式: 結(jié)構(gòu)體變量名.成員名,結(jié)構(gòu)體變量的初始化 形式一:,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; . ; struct 結(jié)構(gòu)體名 結(jié)構(gòu)體變量=初始數(shù)據(jù);,例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; ;,/*struct 結(jié)構(gòu)體名 合稱“結(jié)構(gòu)類型標(biāo)識符”*/,/*成員表列*/,/*此處分號不能省略*/,小結(jié):什么是“結(jié)構(gòu)體類型”?,用戶自己定義的構(gòu)造型數(shù)據(jù)類型; 由若干數(shù)據(jù)項(成員)組成; 同一結(jié)構(gòu)體中的成員可以具有不同的數(shù)據(jù)類型; 結(jié)構(gòu)體類型變量占用的內(nèi)存長度等于各成員項長度之和。,使用結(jié)構(gòu)體的一般步驟,根據(jù)問題的要求定義一個結(jié)構(gòu)體類型 用自己定義的結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量 在程序中使用結(jié)構(gòu)體變量處理問題 注意成員定義與普通變量定義的區(qū)別: 成員定義時不為其分配內(nèi)存 變量定義時為其分配內(nèi)存,main() struct student int number; char name6; char sex; int age; char address20; ; printf(“%dn “,sizeof(struct student); ,結(jié)果: 31,main() struct char name15; char class12; long num; stu=“Wenli“,“Computer 1“,200113; printf(“%sn%sn%ldn“,,stu.class,stu.num); ,結(jié)果:Wenli Computer 1 200113,用結(jié)構(gòu)體數(shù)組管理一組學(xué)生的信息,前面單個學(xué)生可用結(jié)構(gòu)體變量std1,std2處理 若是一個班級的學(xué)生呢?,解決辦法: 一組學(xué)生的數(shù)據(jù),可以使用結(jié)構(gòu)體數(shù)組進(jìn)行處理。假定數(shù)組名為std,則定義student數(shù)組,可以使用下面的說明語句: struct student std10; 或者在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體數(shù)組,9.5 結(jié)構(gòu)體數(shù)組,9.5.1定義結(jié)構(gòu)體數(shù)組:每個數(shù)組元素都是一個結(jié)構(gòu)體類型的數(shù)據(jù),它們都分別包括各個成員項,定義結(jié)構(gòu)體后定義 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu3;,定義結(jié)構(gòu)體時同時定義 struct student int num; char name20; char sex; int age; float score; char addr30; stu3;,9.5.2 結(jié)構(gòu)體數(shù)組的初始化 結(jié)構(gòu)數(shù)組n初值表1,初值表2,.,初值表n;,一般初始化 省略維數(shù) 定義后初始化,一般初始化 struct student int num; char name20; char sex; int age; float score; stu3= 10101,“李寧“,M,18,87.5, 10102,“張凡“,M,19,99, 10103,“王敏“,F,20,78.5 ;,定義后初始化 struct student int num; char name20; char sex; int age; float score; ; struct student stu3= 10101,“李寧“,M,18,87.5, 10102,“張凡“,M,19,99, 10103,“王敏“,F,20,78.5 ;,每個數(shù)組元素的初始數(shù)據(jù)都用花括號括起來。,例 2統(tǒng)計侯選人選票。有三個候選人,每次輸入一個得票的候選人名,要求最后輸出個人得票結(jié)果。,struct person char name20; int count; leader3=“Li”,0,“Zhang”,0,”Wang“,0; main() int i,j; char leader_name20; for(i=1;i=10;i+) scanf(“%s“,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,)=0) leaderj.count+; for(i=0;i3;i+) printf(“%5s:%dn“,,leaderi.count); ,9.6 用指針訪問結(jié)構(gòu)體,9.6.1 指向結(jié)構(gòu)體變量的指針 定義形式: struct 結(jié)構(gòu)體名 *結(jié)構(gòu)體指針名; 例: struct student *p; 使用形式: 使用結(jié)構(gòu)體指針變量引用成員形式 (*結(jié)構(gòu)體指針名). 成員名 結(jié)構(gòu)體指針名-成員名 結(jié)構(gòu)體變量名.成員名,成員運算符 . 指向運算符 - 優(yōu)先級: 最高 結(jié)合方向:從左向右 (*) 與 - 等價,示例9,main() struct student long int num; char name20; char sex; float score; stu,*p; /定義結(jié)構(gòu)體變量stu和結(jié)構(gòu)體指針變量p p= ,9.2 指向結(jié)構(gòu)體數(shù)組的指針,struct student int num; char name20; char sex; int age; stu3=10101,“Li Lin“,M,18, 10102,“Zhang Fun“,M,19, 10104,“Wang Min“,F,20; main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age); ,9.9類型定義(typedef),除可直接使用提供的標(biāo)準(zhǔn)類型和自定義的類型(結(jié)構(gòu)、共用、枚舉)外,也可使用typedef定義已有類型的別名。該別名與標(biāo)準(zhǔn)類型名一樣,可用來定義相應(yīng)的變量。,給已有的數(shù)據(jù)類型加一個新的別名提高程序可讀性(但未建立新的數(shù)據(jù)類型)。 一般形式: typedef 數(shù)據(jù)類型名 新別名 (已有定義) (習(xí)慣用大寫) 例 typedef float REAL; REAL a,b,c;,typedef與#define有相似之處,但二者是不同的:前者是由編譯器在編譯時處理的;后者是由編譯預(yù)處理器在編譯預(yù)處理時處理的,而且只能作簡單的字符串替換。,用 法,1、簡單數(shù)據(jù)類型 typedef float REAL ; REAL a,b; =float a,b; 2、數(shù)組 typedef char STR80; STR s1; =char s180; 3、指針 typedef float *PF; PF p; =float *p; 4、函數(shù) typedef char FCH( ); FCH a; =char a( );,用 法,5、結(jié)構(gòu)體 typedef struct int year,month,day DATE; DATE birthday; 相當(dāng)于 struct int year,month,day birthday;,幾個常用函數(shù),malloc函數(shù) realloc函數(shù) free函數(shù) #include 有些編譯器需要#include 。,malloc 向系統(tǒng)申請分配指定size個字節(jié)的內(nèi)存空間。返回類型是 void* 類型。void* 表示未確定類型的指針。C,C+規(guī)定,void* 類型可以強(qiáng)制轉(zhuǎn)換為任何其它類型的指針。 例子: int* p; p = (int *) malloc (sizeof(int); 例子: int* p = (int *) malloc ( sizeof(int)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論